我已经创建了自己版本的UIActivityIndicatorView
,它在UIImageView
处于活动状态时无限期地旋转。问题是,如果动画(下面的代码)是从另一个动画块中启动的(例如,当一个视图被推到导航堆栈上时),动画就会被取消,旋转器仍然处于非动画状态。
- (void) spin: (UIViewAnimationOptions) options {
[UIView animateWithDuration: 0.5f
delay: 0.0f
options:options
animations: ^{
self.transform = CGAffineTransformRotate(self.transform, M_PI / 2);
} completion: ^(BOOL finished) {
if (finished) {
if (self.isAnimating) {
[self spinWithOptions: UIViewAnimationOptionCurveLinear];
} else if (options != UIViewAnimationOptionCurveEaseOut) {
[self spinWithOptions: UIViewAnimationOptionCurveEaseOut];
}
}
}];
}
- (void) startAnimating {
if (!self.isAnimating) {
self.isAnimating = YES;
[self spin: UIViewAnimationOptionCurveEaseIn];
}
}
一种可能的解决方案是在第一次调用spin:
(即performSelector:withOptions:afterDelay
)之前插入人为的延迟,但这是一个很难看的攻击。
有什么方法可以确保这个旋转不会被外部动画块取消,或者是一个更好的方法来处理它呢?
发布于 2013-12-03 00:47:27
默认情况下,嵌套动画确实继承了父动画的持续时间和动画曲线,但是即使是这些选项也可以根据需要被重写。嵌套动画块中使用的
UIViewAnimationOptionOverrideInheritedCurve
和UIViewAnimationOptionOverrideInheritedDuration
键允许为第二动画修改来自第一动画的曲线和持续时间值。如果这些键不存在,则将使用外部动画块的持续时间和曲线。
传递这些选项以覆盖从外部动画块继承的属性。
https://stackoverflow.com/questions/20340210
复制相似问题