【发布时间】:2016-06-28 16:07:11
【问题描述】:
我正在尝试将旋转动画按度数应用于UIImageView,并将旋转变换保持在完成块中。
我面临的问题是,当执行完成块时,从动画的结束状态传递到完成块时会产生可见的闪烁。
这是我目前使用的代码:
if (futureAngle == currentAngle) {
return;
}
float rotationAngle;
if (futureAngle < currentAngle) {
rotationAngle = futureAngle - currentAngle;
}else{
rotationAngle = futureAngle - currentAngle;
}
float animationDuration = fabs(rotationAngle) / 100;
rotationAngle = GLKMathDegreesToRadians(rotationAngle);
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:rotationAngle];
rotationAnimation.duration = animationDuration;
rotationAnimation.removedOnCompletion = YES;
[CATransaction setCompletionBlock:^{
view.transform = CGAffineTransformRotate(view.transform, rotationAngle);
}];
[view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
【问题讨论】:
-
当您说闪烁时,我假设您的意思是在动画结束时,它会在返回最终状态之前暂时返回初始状态?这可以通过以下两种方式解决:(a) 在开始动画之前设置最终的
view.transform(并且您不再需要completionBlock);或 (b) 将动画的fillMode设置为kCAFillModeForwards并将removedOnCompletion设置为false。 -
@Rob 你能提供一个关于完成块的建议的例子吗?在创建帖子之前,我尝试将 fillMode 设置为 kCAFillModeForwards 并将 removedOnCompletion 设置为 false,但它们对我不起作用。
标签: ios objective-c cabasicanimation catransaction