Swift4, iOSアプリの実装で質問です。
UIViewPropertyAnimatorを使用してアニメーションを表示させようと思い、以下のコードを作成しました。
Storyboardにはボタンとスイッチが一つずつあるシンプルな構成で、アニメーション対象となるUIViewはコード内で作成しています。
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var reverseSwitch: UISwitch! 6 var animator: UIViewPropertyAnimator? 7 8 @IBAction func switchReverse(_ sender: UISwitch) { 9 animator?.isReversed = sender.isOn 10 } 11 12 @IBAction func pushAnimationButton(_ sender: Any) { 13 animator?.startAnimation() 14 } 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 let rect: CGRect = CGRect(x: 0, y: 0, width: 20, height: 20) 20 let view: UIView = UIView(frame: rect) 21 view.backgroundColor = UIColor.blue 22 self.view.addSubview(view) 23 24 animator = UIViewPropertyAnimator(duration: 3, curve: .easeOut) { 25 view.center = self.view.center 26 } 27 guard let isReversed: Bool = animator?.isReversed else { return } 28 reverseSwitch.isOn = isReversed 29 } 30 31 override func didReceiveMemoryWarning() { 32 super.didReceiveMemoryWarning() 33 } 34 35} 36
ここで、以下2点の問題が解決できず困っています。
- アニメーションを終えた後、animator?.startAnimation()を呼び出しても再度アニメーションさせることができない
- curveを.easeOut等に設定し、animator?.isReversedで逆再生すると座標が飛んでしまう
animatorのstateの状態がいくつかあり、その状態によってはstartAnimation()ができないのかと思い、stopAnimation(_ withoutFinishing: Bool)
やfinishAnimation(at: UIViewAnimatingPosition)
を試した上で呼び出しても再度アニメーションさせることが出来ませんでした。
実行結果
上記問題の解決方法について、ご回答よろしくお願いいたします。
参考URL
https://dev.classmethod.jp/smartphone/ios10-uiviewpropertyanimator/
https://qiita.com/KEN-chan/items/f80c17c583ac44d67a58
あなたの回答
tips
プレビュー