在UIView动画块中,有没有办法获得当前动画的持续时间?找出当前动画块的动画持续时间
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
在UIView动画块中,有没有办法获得当前动画的持续时间?找出当前动画块的动画持续时间
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
由于您使用的是块,为什么不只是捕获一个变量呢?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];
同意。我们已经通过了持续时间,为什么我们应该找到另一种方式。 – Mrug 2014-04-11 11:51:19
[CATransaction animationDuration]
是你在找什么
不幸的是,这不起作用,UIView动画块显然不直接与CATransaction一起工作。 – 2013-10-22 04:32:42
你可以得到当前的动画很轻松了。例如,建立一个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];
TL; DR:从一个调用时
@Dimitri Bouniol的回答并没有为我工作:使用的CALayer -actionForKey :,不-animationForKey受影响的setter动画块内。据我了解,原因是UIView的动画系统在开始实际动画之前设置状态(并在开始实际动画之前调用设置器)。对我来说,虽然在图层上调用了类似的-actionForKey:方法,但对我来说还是有效的。返回的行为确实具有适当的持续时间设置,并且可以在他的回答中使用。
CAAnimation *animation = (CAAnimation*)
[self.layer [email protected]"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
我不知道我明白你的意思,动画持续时间不是1.0吗? – 2012-04-05 08:14:14
是的,但我在块内部使用了需要知道持续时间的组件,并且我不想将持续时间作为变量 – adamsiton 2012-04-05 08:16:54
好问题+1抱歉,我忍不住。 – 2012-04-05 08:22:26