2013-05-29 2 views
0

Я работаю над приложением, которое нужно перелистать через 300 или около того изображений в последовательности с 2-секундной задержкой между изображениями.iOS - Как отобразить большое количество изображений в последовательности

Эти изображения являются штрих-кодами, которые генерируются «на лету» во время отображения. Они не хранятся изображения.

Дисплей находится в контроллере навигации, и я хотел бы, чтобы пользователь мог нажать кнопку «назад» без сбоя приложения с селектора, отправляемого экземпляру, который больше не существует.

Я знаю, что можно оживить UIImageView, но я не хочу создавать большой массив изображений из-за проблем с памятью.

Я хотел бы сделать это в цикле, где я создаю штрих-код, отображаю изображение, задерживаю 2 секунды, а затем повторяю со следующим изображением.

Следующий код работает, но сбой, если вы нажмете кнопку «назад», с сообщением «сообщение отправлено на освобожденный экземпляр».

NSSet *dataSet = [self fetchDataSet]; 

    for (MyBarCode *data in dataSet) { 

     // display barcode in UIImageView 
     [self updateBarCodeImage:data ]; 

     [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 2.0]]; 
    } 

Там, кажется, не быть способ, чтобы отменить этот таймер, или я мог бы сделать это в viewWillDisapear.

Каков правильный способ сделать это?

Пожалуйста, не просто укажите мне примеры animationImages. Я уже видел их всех, и снова - я не хочу, чтобы все эти изображения сохранялись в памяти во время анимации. Если есть способ генерировать изображения «на лету» во время анимации, теперь это было бы интересно.

+0

Ну, я нашел один метод, который работает. Я начал не повторяющийся NSTimer, который вызвал метод, который обновил изображение, а затем запланировал еще один таймер сделать то же самое через 2 секунды. Преимущество заключается в том, что таймер может быть отменен в viewWillDisappear. – John

+0

Что делает «updateBarCodeImage»? – magma

+0

Он генерирует следующее изображение штрих-кода и отображает его в UIImageView. – John

ответ

1

Я думаю, что что-то, как это должно работать:

__weak ViewController *bSelf = self; 
NSSet *dataSet = [self fetchDataSet]; 
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul); 
dispatch_async(myQueue, ^{ 
    __strong ViewController *sSelf = bSelf; 

    for (BoardingPass *data in dataSet) { 
    { 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
     [sSelf updateBarCodeImage:data] 
     }); 
    } 

}); 
0

ОБНОВЛЕНО:

Ну, я не уверен, что именно вы ищете. Если вы говорите о простой анимации, чем о да, то Cocos 2D будет излишней. В этом случае я предлагаю делать это учебник, который дал мне много идей на проекте я работал на некоторое время назад:

http://www.raywenderlich.com/2454/how-to-use-uiview-animation-tutorial

+0

Кажется, что это слишком много, чтобы прокрутить некоторые изображения. Я никогда не делал программы cocos2d раньше, можете ли вы добавить представление cocos2d в качестве подзаголовка к представлению обычного viewcontroller? Например, в приведенном примере нет навигационной панели. – JonahGabriel

+0

Если вам нужна панель Nav, вам не обязательно идти по 2D-маршруту Cocos. – sangony

Смежные вопросы