我正在尝试重复使用Javier Berlana创造的Ken Burns效果视图(顺便说一句,Kudos给他)。
我在根视图控制器上有视图。当我按下一个新的视图控制器然后将其弹出时,视图上的动画将在动画结束时停止。当过渡时间过去时,它会更改图像并且动画再次起作用。
我环顾四周,但没有找到解决这个问题的有效方案。我的最后一个解决方案是实现此处显示的pauseLayer
和resumeLayer
(位于底部):
https://gist.github.com/1802341
我在视图控制器的viewWillAppear
和viewWillDisappear
上调用这些方法。
我该怎么做才能暂停/恢复动画?
我正在为iOS 5开发。
答案 0 :(得分:1)
从Ken Burns实现中,我看到动画是通过循环处理的:
- (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);
}
因此,当您设置标志时,仅执行循环体以产生延迟(休眠),并且状态的其余部分保持不变。
希望这有帮助。