実現したいこと
以下のGIFのようなオブジェクトを加速させながら消えていくアニメーションを実行したいです。アニメーションを実行する対象はUIImageView
です。
現状はこのように加速しながらの移動ではなく、等速で動いています(だんだん薄くなって消えるのはできています)。
これを加速しながら動かすためにはどうすれば良いですか。
該当のソースコード
swift
1override func viewDidAppear(_ animated: Bool) { 2 super.viewDidAppear(animated) 3 4 RunLoop.main.run(until: Date(timeIntervalSinceNow: 0.1)) 5 //アニメーション 6 timer = Timer.scheduledTimer(timeInterval: 0.8/100, target: self, selector: #selector(self.moveView), userInfo: nil, repeats: true)//ここでviewを動かす 7 timer2 = Timer.scheduledTimer(timeInterval: 1.5/100, target: self, selector: #selector(self.showView), userInfo: nil, repeats: true)//後ろの画面の表示 8 } 9 10 var downAlpha: Float = 1.0 11 var downAlpha2: Float = 1.0 12 13 @objc func moveView() { 14 downAlpha -= 0.01 15 ChangeAlpha(targetView: upView) 16 ChangeAlpha(targetView: downView) 17 upView.center.y = upView.center.y - upView.center.y / CGFloat(downAlpha * 100) 18 downView.center.y = downView.center.y + (UIScreen.main.bounds.size.height - downView.center.y) / CGFloat(downAlpha * 100) 19 if downAlpha <= 0 { 20 timer.invalidate() 21 22 upView.isHidden = true 23 downView.isHidden = true 24 } 25 } 26 27 func ChangeAlpha(targetView: UIView) { 28 targetView.alpha = CGFloat(downAlpha) 29 } 30 31 @objc func showView() { 32 downAlpha2 -= 0.01 33 hideView.alpha = CGFloat(downAlpha2) 34 if downAlpha2 <= 0 { 35 timer2.invalidate() 36 37 hideView.isHidden = true 38 } 39 }
補足情報(FW/ツールのバージョンなど)
swift4
Xcode11.4
iOS13.4
いわゆる「等加速度直線運動」の方程式を当てはめてみるのはどうでしょうか。
https://ja.wikipedia.org/wiki/%E7%AD%89%E5%8A%A0%E9%80%9F%E5%BA%A6%E7%9B%B4%E7%B7%9A%E9%81%8B%E5%8B%95
回答1件
あなたの回答
tips
プレビュー