14

UIView アニメーション ブロック内で、現在のアニメーションの継続時間を取得する方法はありますか?

[UIView animateWithDuration:1.0 animations:^{
    // float duration = ?
}];
4

5 に答える 5

2

TL;DR: -animationForKey: ではなく、CALayer -actionForKey: を使用してください。

アニメーションブロック内の影響を受けるセッターから呼び出された場合、@Dimitri Bouniolの答えはうまくいきませんでした。私の理解によると、その理由は、UIView のアニメーション システムが実際のアニメーションを開始する前に状態を設定する (そして、実際のアニメーションを開始する前にセッターを呼び出す) ことです。私にとってうまくいったのは、レイヤーで同様の -actionForKey: メソッドを呼び出すことでした。返されたアクションには適切な期間が設定されており、回答でそのまま使用できます。

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];
于 2014-04-30T22:33:16.407 に答える
1

[CATransaction animationDuration]あなたが探しているものです

于 2012-09-24T14:34:03.863 に答える
0

ブロックを使用しているので、それで変数をキャプチャしてみませんか?

CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{ 
    CGFloat theDuration = duration; 
}];
于 2012-04-13T19:28:54.367 に答える