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