在UIView动画块内,有没有一种方法可以获取当前动画的持续时间?
[UIView animateWithDuration:1.0 animations:^{ // float duration = ?}];
在UIView动画块内,有没有一种方法可以获取当前动画的持续时间?
[UIView animateWithDuration:1.0 animations:^{ // float duration = ?}];
let currentAnimationDuration = UIView.inheritedAnimationDuration
来自Apple文档:
概要
返回当前动画的继承持续时间。
讨论
仅在调用时位于
UIView
动画块内,此方法才返回非零值。
CAAnimation *animation = (CAAnimation *)[self.layer actionForKey@"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
actionForKey:
返回一个符合CAAction
协议但不是CAAnimation
的_UIViewAdditiveAnimationAction
。因此,timingFunction
属性不存在。@Dimitri Bouniol的答案对我有效。 - Ortwin Gentz[CATransaction animationDuration]
是你要找的
既然你正在使用块,为什么不直接用它来捕获变量呢?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];
您可以轻松地获取当前动画。例如,设置一个CATransaction
:
CAAnimation *animation = [self.layer animationForKey:self.layer.animationKeys.firstObject];
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];