Перезапуск анимации при подключении контроллера представления
Я пытаюсь повторно использовать вид эффекта Кена Бернса, созданный Хавьером Берланой (кстати, ему за это).
У меня есть вид на мой корневой контроллер вида. Когда я нажимаю новый контроллер представления и затем вынимаю его, анимация в представлении останавливается в конце анимации. Когда время перехода проходит, оно меняет изображение, и анимация снова работает.
Я огляделся, но не нашел рабочего решения этой проблемы. Моим последним решением было реализовать pauseLayer
а также resumeLayer
показано здесь (внизу):
https://gist.github.com/1802341
Я призываю эти методы на viewWillAppear
а также viewWillDisappear
на мой взгляд контроллер.
Что я должен сделать, чтобы приостановить / возобновить анимацию?
Я разрабатываю для iOS 5.
1 ответ
Из реализации Кена Бернса я вижу, что анимация обрабатывается с помощью цикла:
- (void)_startAnimations:(NSArray *)images
{
@autoreleasepool {
for (uint i = 0; i < [images count]; i++) {
self.currentImage = i;
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(_animate:)
object:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation] waitUntilFinished:YES];
sleep(self.timeTransition);
i = (i == [images count]-1) && isLoop ? -1 : i;
}
}
}
Один из способов остановить анимацию - добавить флаг, например так:
for (uint i = 0; i < [images count]; i++) {
if (!animationSuspended) {
self.currentImage = i;
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(_animate:)
object:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation] waitUntilFinished:YES];
i = (i == [images count]-1) && isLoop ? -1 : i;
}
sleep(self.timeTransition);
}
Таким образом, когда вы устанавливаете флаг, тело цикла выполняется только для создания задержки (сна), а остальное состояние остается неизменным.
Надеюсь это поможет.