UIView アニメーション ブロック内で、現在のアニメーションの継続時間を取得する方法はありますか?
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
UIView アニメーション ブロック内で、現在のアニメーションの継続時間を取得する方法はありますか?
[UIView animateWithDuration:1.0 animations:^{
// float duration = ?
}];
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];
[CATransaction animationDuration]
あなたが探しているものです
ブロックを使用しているので、それで変数をキャプチャしてみませんか?
CGFloat duration = 1.0;
[UIView animateWithDuration:duration animations:^{
CGFloat theDuration = duration;
}];