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
[CATransaction animationDuration]
あなたはあなたが簡単に十分な現在のアニメーションを得ることができます
残念ながらそれは動作しません、UIViewアニメーションブロックは明らかにCATransactionで直接動作しません。 –
探しているものです。例えば、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:-animationForKeyないのCALayer -actionForKey :,使用:
@Dimitri Bouniolの答えは私のために動作しませんでしたが、ANから呼び出された場合影響を受ける設定者をアニメーションブロック内に配置します。理由は、私の理解から、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にならないのはわかりませんが、 –
はい、しかし、ブロック内のコンポーネントを使用して期間を知っている必要があり、変数として継続時間を渡したくありません。 – adamsiton
良い質問+1すみませんでした。 –