EaseInOutっぽく画像を回転させるクラス
画像を360度以上回転させたい
↑動き始めと停止前はゆっくりになるようにして、画像をくるーんと360度回転させるのができない件です。
きっとどこかにライブラリーとかありそうだけど結局自作しました。
MinuteHand - GitHub
↑GitHubに動作が確認できる簡単なプロジェクトまるごと置いてみました。
起動後の画面でボタンを押すとくるりーんと針が回転する、というだけですが。
なお、Xcode 4.3 Developer Preview 3、つまりiOS 5.1 beta 3用で作っているのでビルド時にはターゲット変更等必要かもしれません。
コード的にはタイマーで一定時間ごとに画像の角度を変えることにしました。
時間間隔を変える方法もありそうですが、ここでは一定のタイミングで処理します、まあこっちの方が簡単でしょうから。
UIViewAnimationOptionCurveEaseInOutに相当する最初と最後はゆっくり、というのを考慮するために角速度を以下のように変化させることにしました。

横軸が時間t[sec]、縦軸が角速度ω[rad/sec]です。
角速度の最大値とそこに達するまでの時間を決めておきます。とりあえず加速時間と減速時間は同じにしてます。
上図において、台形の面積が回転する角度になるわけです。
なお、このように台形にならないくらい回転角が小さい場合は

↑このように立ち上がる角速度の変化が同じようにします。
角度を計算するクラスはRateEaseInOutクラスです(なんてダサイ名前なんだろうね)。
あらかじめこのクラスのオブジェクトをMyViewControllerクラス内で作っています。
スタートボタンをタップするとタイマーがスタート、ステップ数をゼロからカウントしていきます。
RateEaseInOutクラスのメソッドがステップ数に応じた角度を教えてくれます。
とりあえあずそれらしい動きになっているみたいだからよしってことで。
この調子でいくと、時計アプリが完成するのはいつになるやら、、、?
↑動き始めと停止前はゆっくりになるようにして、画像をくるーんと360度回転させるのができない件です。
きっとどこかにライブラリーとかありそうだけど結局自作しました。
MinuteHand - GitHub
↑GitHubに動作が確認できる簡単なプロジェクトまるごと置いてみました。
起動後の画面でボタンを押すとくるりーんと針が回転する、というだけですが。
なお、Xcode 4.3 Developer Preview 3、つまりiOS 5.1 beta 3用で作っているのでビルド時にはターゲット変更等必要かもしれません。
コード的にはタイマーで一定時間ごとに画像の角度を変えることにしました。
時間間隔を変える方法もありそうですが、ここでは一定のタイミングで処理します、まあこっちの方が簡単でしょうから。
UIViewAnimationOptionCurveEaseInOutに相当する最初と最後はゆっくり、というのを考慮するために角速度を以下のように変化させることにしました。

横軸が時間t[sec]、縦軸が角速度ω[rad/sec]です。
角速度の最大値とそこに達するまでの時間を決めておきます。とりあえず加速時間と減速時間は同じにしてます。
上図において、台形の面積が回転する角度になるわけです。
なお、このように台形にならないくらい回転角が小さい場合は

↑このように立ち上がる角速度の変化が同じようにします。
角度を計算するクラスはRateEaseInOutクラスです(なんてダサイ名前なんだろうね)。
あらかじめこのクラスのオブジェクトをMyViewControllerクラス内で作っています。
スタートボタンをタップするとタイマーがスタート、ステップ数をゼロからカウントしていきます。
RateEaseInOutクラスのメソッドがステップ数に応じた角度を教えてくれます。
とりあえあずそれらしい動きになっているみたいだからよしってことで。
この調子でいくと、時計アプリが完成するのはいつになるやら、、、?
スポンサーサイト