我有以下代码,完全正常。它的作用是将动态创建的图像从一个点移动到另一个点。
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
image.transform = transform;
}
completion:^(BOOL finished){
if (finished) {
NSLog(@"finished animation in true");
[arrOfTempImages removeObject:image];
image.image = nil;
// and do some other stuff here
} else {
NSLog(@"finished animation in false");
}
}];
但是,有时候我需要更改viewController,所以当视图即将消失时,我会使用apple的文档中的这个方法暂停动画:
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
这也完美无缺。当我回到旧VC时,我使用以下方法恢复动画:
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
哪个再次正常....但问题是代码" NSLog(@"完成动画的假和#34;); "当我改变VC并且当我回到原始VC并等待图像到达终点时,正在执行,这个代码也没有" NSLog(@"完成动画的真实" );"被执行。这意味着图像到达终点时,不会指向零并保留在屏幕上。
我该怎么办?我想在"完成中执行一些代码:"但是在重新输入原始VC时,该部分代码不再被调用
答案 0 :(得分:0)
根据Apple's docs,在iOS 4+中不鼓励使用[UIView setAnimationBeginsFromCurrentState:YES]
。
相反,请尝试将选项参数从UIViewAnimationOptionCurveEaseOut
更改为UIViewAnimationOptionBeginFromCurrentState
,然后调用完成块。