我有一个动画块来执行基于简单变换的动画,完成后将从其超级视图中删除有问题的视图。
UIView *msgView = [[UIView alloc] initWithFrame:CGRectMake(160, 120, 160, 100)];
// Do stuff to set up the subviews of msgView.
// Add the msgView to the superview (ViewController) that is going to display it.
CATransform3D transform = CATransform3DMakeScale(2.5, 2.5, 1.0);
[UIView animateWithDuration:5.0
animations:^(void){msgView.layer.transform = transform;}
completion:^(BOOL finished){[msgView removeFromSuperview];}];
然后我使用技术问答 1673 详细介绍的代码http://developer.apple.com/library/ios/#qa/qa1673/_index.html http://developer.apple.com/library/ios/#qa/qa1673/_index.html暂停动画。
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(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;
}
但是,此代码不会阻止完成代码的执行。因此,为了防止代码执行,我将完成代码更改为:
completion:^(BOOL finished){if(finished == TRUE)[msgView removeFromSuperview];};
检查 finish == TRUE 可以防止在动画块暂停时执行完成代码。如果在“取消暂停”动画之前超过了持续时间,则将不会执行完成代码。即在这种情况下,msgView 保留在超级视图中。
无论如何,是否可以暂停/取消暂停与完成代码关联的动画和计时器(如果发生了这种情况)?