Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 弹出视图控制器时重新启动动画_Objective C_Ios5_Uiviewanimation - Fatal编程技术网

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

Objective c 弹出视图控制器时重新启动动画,objective-c,ios5,uiviewanimation,Objective C,Ios5,Uiviewanimation,我试图重新使用由哈维尔·贝拉纳(Javier Berlana)创建的肯·伯恩斯效果视图(顺便说一句,他很荣幸) 我有根视图控制器上的视图。当我按下一个新的视图控制器,然后将其弹出时,视图上的动画将在动画结束时停止。当过渡时间过去时,它会更改图像,动画将再次工作 我环顾四周,但没有找到解决这个问题的有效方法。我的最后一个解决方案是实现此处(底部)显示的pauseLayer和resumeLayer: 我在视图控制器的视图将出现和视图将消失上调用这些方法 我应该如何暂停/恢复动画 我正在为iOS 5

我试图重新使用由哈维尔·贝拉纳(Javier Berlana)创建的肯·伯恩斯效果视图(顺便说一句,他很荣幸)

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

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

我在视图控制器的
视图将出现
视图将消失
上调用这些方法

我应该如何暂停/恢复动画


我正在为iOS 5开发。

从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; 
      }

   }
 }
-(void)\u开始图像:(NSArray*)图像
{
@自动释放池{
对于(uint i=0;i<[图像计数];i++){
self.currentImage=i;
NSOperationQueue*mainQueue=[NSOperationQueue mainQueue];
NSInvocationOperation*操作=[[NSInvocationOperation alloc]initWithTarget:self
选择器:@selector(_animate:)
对象:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation]waitUntilFinished:YES];
睡眠(自我时间转换);
i=(i=[图像计数]-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);
      }
for(uint i=0;i<[图像计数];i++){
如果(!animationSuspended){
self.currentImage=i;
NSOperationQueue*mainQueue=[NSOperationQueue mainQueue];
NSInvocationOperation*操作=[[NSInvocationOperation alloc]initWithTarget:self
选择器:@selector(_animate:)
对象:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation]waitUntilFinished:YES];
i=(i=[图像计数]-1)和&isLoop?-1:i;
}  
睡眠(自我时间转换);
}
因此,当您设置标志时,循环体仅被执行以产生延迟(sleep),其余状态保持不变


希望这有帮助。

从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; 
      }

   }
 }
-(void)\u开始图像:(NSArray*)图像
{
@自动释放池{
对于(uint i=0;i<[图像计数];i++){
self.currentImage=i;
NSOperationQueue*mainQueue=[NSOperationQueue mainQueue];
NSInvocationOperation*操作=[[NSInvocationOperation alloc]initWithTarget:self
选择器:@selector(_animate:)
对象:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation]waitUntilFinished:YES];
睡眠(自我时间转换);
i=(i=[图像计数]-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);
      }
for(uint i=0;i<[图像计数];i++){
如果(!animationSuspended){
self.currentImage=i;
NSOperationQueue*mainQueue=[NSOperationQueue mainQueue];
NSInvocationOperation*操作=[[NSInvocationOperation alloc]initWithTarget:self
选择器:@selector(_animate:)
对象:[NSNumber numberWithInt:self.currentImage]];
[mainQueue addOperations:[NSArray arrayWithObject:operation]waitUntilFinished:YES];
i=(i=[图像计数]-1)和&isLoop?-1:i;
}  
睡眠(自我时间转换);
}
因此,当您设置标志时,循环体仅被执行以产生延迟(sleep),其余状态保持不变


希望这有帮助。

当从另一个视图控制器返回动画时,它不起作用(直到出现新图像)。当从另一个视图控制器返回动画时,它不起作用(直到出现新图像)。