どのシナリオでそれらのいずれかを最適なものとして使用する必要があるのか知りたいですか?
次のブログhttps://www.hackingwithswift.com/ios10で、「アニメーションの再検討」セクションに書かれた例で、「CABasicAnimation」を使用して同じ要件を再適用できますか?つまり、アニメーションの一時停止と再開を意味しますか?
私が収集したものから、UIView.animate(...)メソッドを使用すると、voidが返されるため、アニメーションが完了する前にアニメーションを制御できなくなります。これにより、処理する戻り値が得られません。 UIViewPropertyAnimatorを取得すると(ここでも、アニメーションの進行状況を確認するための「isRunning」があります。)CABasicAnimationでも、アニメーションを実行するための進行状況チェックはありません。私の仮定が間違っている場合は私を訂正してください。ありがとうございました。
これらのAPIはすべて優れており、ユースケースもわずかに異なります。それらに入る前に、それを理解するのは良いことです
UIKitでは、アニメーションはUIView
オブジェクトを使用して実行されます。UIKitを使用したアニメーションで使用できるプロパティは次のとおりです。
frame
bounds
center
transform
alpha
backgroundColor
contentStretch
Core Animationは、ビューの基になるレイヤーへのアクセスを提供し、以下に概説するように異なるプロパティのセットを公開します(ビューとレイヤーは複雑にリンクされているため、ビューのレイヤーへの変更はビュー自体に影響します)。
詳細については、このAppleDeveloperドキュメントを参照してください。
私の意見では、これらはまだ最も使いやすいです。コードフットプリントを大きくしすぎない、非常に単純なAPI。これは、単純なファイアアンドフォーゲットアニメーション(選択時にボタンをポップにするなど)、またはキーフレームのサポートが優れているため複雑なキーフレームアニメーションを作成する場合に使用します。
例:
UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseOut, animations: {
button.transform = .init(scaleX: 1.1, y: 1.1)
}
使用するのは少し簡単ではないかもしれませんが、前述のように、ビュープロパティではなくレイヤープロパティをアニメーション化する場合はいつでも必要です。これらの例は、コーナー半径、シャドウ、および境界線です。
例:
CATransaction.begin()
CATransaction.setAnimationDuration(0.5)
CATransaction.timingFunction = .init(name: .easeOut)
let cornerAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius))
cornerAnimation.fromValue = 0.0
cornerAnimation.toValue = 10.0
button.layer.add(cornerAnimation, forKey: #keyPath(CALayer.cornerRadius))
CATransaction.commit()
Core Animationの詳細については、これはすばらしい記事です(私が書いたものではありません)。
iOS 10で追加されました。名前が示すように、これは別のビューベースのアニメーションAPIです。UIViewのアニメーションメソッドとは異なる点がいくつかあります。主なものは、インタラクティブアニメーションをサポートし、アニメーションを動的に変更できることです。アニメーションを一時停止、巻き戻し、またはスクラブしたり、外出先でアニメーションブロックを追加したり、再生中にアニメーションを反転したりできるため、非常に強力です。これは、アニメーションをユーザーが制御できるようにする場合に使用します。スクラブfractionComplete
は、アニメーターオブジェクトにプロパティを設定することで機能します。このプロパティは、パンジェスチャ認識機能または感圧タッチ認識機能(またはKVOを使用するキー)に簡単に接続できます。
前述のように、への参照を保存UIViewPropertyAnimator
し、アニメーション中にそのアニメーションまたは完了ブロックを変更することもできます。
例:
// Create an animation object with an initual color change animation
let animator = UIViewPropertyAnimator(duration: duration, curve: .linear) {
button.backgroundColor = .blue
}
// At any point during the runtime, we can amend the list of animations like so
animator.addAnimations {
button.transform = .init(scaleX: 1.1, y: 1.1)
}
animator.startAnimation()
}
注目すべきは、あなたが実際に使用できるということですUIView.animate
し、UIView.animateKeyframes
あなたの内からUIViewPropertyAnimator
アニメーションブロックは、両方を使用する必要性を感じなければなりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加