2秒間でImageVeiwが画面外から画面中央に一定の速度で移動するアニメーション(NSTimer使用)を使って実装中です。※効果音やその他のアニメーションとの関係で2秒ちょうどで移動が完了するようにしたいと思っています。
Androidの実装時に繰り返す描画の経過時間に応じてイメージの座標が変わるようにしてコマ落ちの対策をしていたのですが、Swiftの場合はコマ落ちの対策はするのが一般的なのでしょうか?
ちなみに、他のアニメーション含め、多くのイメージを一度に動かすようなことはないので、アプリ単体を動かしただけではコマ落ちすることはほぼないので考えなくてもいいのかもしれないのですが、ググってもコマ落ちでヒットしなかったので。
ちなみに以下のような感じで実装すると思ったように動きますが、なんか滑らかに動きません。この時間に応じて、ということを考えずに実装するともっとシンプルになって、かつ滑らかに動きます…汗
Swift
1class AnimationB: UIViewController{ 2 3 var time: CGFloat! 4 var startTime: Double! 5 var imageView: UIImageView! //UIImageの設定等省略 6 var imageH: CGFloat! //イメージの高さ 7 var xPosition,yPosition: CGFloat! //イメージ座標 8 9 func startAnimation(){ 10 startTime = CFAbsoluteTimeGetCurrent() 11 time = CGFloat(CFAbsoluteTimeGetCurrent()) 12 13 timer = NSTimer.scheduledTimerWithTimeInterval( 14 0.017, //FPS:60 15 target: self, 16 selector: #selector(AnimationB.animation), 17 userInfo: nil, 18 repeats: true) 19 } 20 21 @objc func animation(){ 22 let nowTime = CFAbsoluteTimeGetCurrent() 23 24 if nowTime - startTime < 2 { 25 let passTime = CGFloat(CFAbsoluteTimeGetCurrent()) - time 26 yPosition = yPosition - (imageH * 1.2) / 2 * passTime 27 imageView.center = CGPoint(x: xPosition, y: yPosition) 28 time = CGFloat(CFAbsoluteTimeGetCurrent()) 29 }else{ 30 timer.invalidate() 31 } 32 33 } 34 35 override func viewDidLoad() { 36 super.viewDidLoad() 37 } 38 39 override func didReceiveMemoryWarning() { 40 super.didReceiveMemoryWarning() 41 } 42 43}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/24 22:51