gpt4 book ai didi

ios - 在动画 block 中调用时,UIView 动画无法无限重复

转载 作者:行者123 更新时间:2023-11-28 22:21:15 26 4
gpt4 key购买 nike

我已经创建了我自己的 UIActivityIndi​​catorView 版本,它会在 UIImageView 处于事件状态时无限期地旋转。问题是,如果动画(下面的代码)是从另一个动画 block 中开始的(例如,当一个 View 被推送到导航堆栈时),动画将被取消并且微调器保持在非动画状态。

- (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),但这是一个丑陋的 hack .

有没有什么方法可以确保这个旋转不会被外部动画 block 取消,或者有更好的方法一起处理它吗?

最佳答案

根据UIView animation guide:

By default, nested animations do inherit the parent’s duration and animation curve but even those options can be overridden as needed. The UIViewAnimationOptionOverrideInheritedCurve and UIViewAnimationOptionOverrideInheritedDuration keys used in the nested animation block allow the curve and duration values from the first animation to be modified for the second animation. If these keys were not present, the duration and curve of the outer animation block would be used instead.

传递这些选项以覆盖从外部动画 block 继承的属性。

关于ios - 在动画 block 中调用时,UIView 动画无法无限重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com