0
私はUIButtonのフリップXアニメーションをしようとしていました。私はこのアニメーションを行う方法に関するいくつかのドキュメントを見てきましたが、繰り返しでそれを行う方法を見つけることができませんでした。たとえば、私はUIButtonの画像を反転し、繰り返して5秒の時間間隔の後に変更したいと思います。 ヘルプがありますか?ありがとう。一定の時間が経過してxアニメーションが繰り返し再生される
私はUIButtonのフリップXアニメーションをしようとしていました。私はこのアニメーションを行う方法に関するいくつかのドキュメントを見てきましたが、繰り返しでそれを行う方法を見つけることができませんでした。たとえば、私はUIButtonの画像を反転し、繰り返して5秒の時間間隔の後に変更したいと思います。 ヘルプがありますか?ありがとう。一定の時間が経過してxアニメーションが繰り返し再生される
CAAnimationGroupを使用すると、アニメーションの配列をグループ化できます。 animationGroup全体の合計アニメーションは6.0、フリップアニメーションは1.0秒です。残りの5.0秒はここで遅れとして働く。
EDIT:CATransaction.setCompletionBlock
を使用することができますが、すべてのアニメーションが完了した後、それが唯一の完了を呼び出します。今度はフリップが1回だけ行われ、完了すると完了コールが受信され、イメージビューが更新され、再びフリップアニメーションが開始されます。
あなたの答えのために、この
imageView.flip {
// update imageView and call it again.
}
extension UIView {
func flip(completion: @escaping()->()) {
CATransaction.begin()
CATransaction.setCompletionBlock {
// completion code here
completion()
}
let animationGroup = CAAnimationGroup()
animationGroup.duration = 6.0
animationGroup.repeatCount = 1
let easeInOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
let animation = CABasicAnimation(keyPath: "transform")
animation.duration = 1.0
animation.autoreverses = true
animation.fromValue = CATransform3DIdentity
animation.toValue = NSValue(caTransform3D: CATransform3DMakeRotation(CGFloat(M_PI), 0, 1, 0))
animation.timingFunction = easeInOut
animationGroup.animations = [animation]
layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
layer.add(animationGroup, forKey: "flip")
CATransaction.commit()
}
}
おかげのように、私は、例えば、5秒(遅延)、ビューフリップとそのビューの変更のイメージのためにした後、それをしたいです。 –
編集された回答があなたの必要性に合っているかどうかを確認してください。 – Matt
ありがとう、それは働いた!別の質問ですが、私はビューのイメージをどこで変えるべきですか?どのラインでアニメーションが終了したことが検出されましたか? –