弹出视图控制器时重新启动动画

时间:2012-02-11 17:22:39

标签: objective-c ios5 uiviewanimation

我正在尝试重复使用Javier Berlana创造的Ken Burns效果视图(顺便说一句,Kudos给他)。

我在根视图控制器上有视图。当我按下一个新的视图控制器然后将其弹出时,视图上的动画将在动画结束时停止。当过渡时间过去时,它会更改图像并且动画再次起作用。

我环顾四周,但没有找到解决这个问题的有效方案。我的最后一个解决方案是实现此处显示的pauseLayerresumeLayer(位于底部):

https://gist.github.com/1802341

我在视图控制器的viewWillAppearviewWillDisappear上调用这些方法。

我该怎么做才能暂停/恢复动画?

我正在为iOS 5开发。

1 个答案:

答案 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);
      }

因此,当您设置标志时,仅执行循​​环体以产生延迟(休眠),并且状态的其余部分保持不变。

希望这有帮助。