概要
Swiftでキーフレームアニメーション実装の練習をしようと思い,おっぱい関数選手権大会にて準優勝に輝いた@CHARTMANqさん作のおっぱい関数をつまんでプルンとさせてみました.
できたもの
GitHubリポジトリ(自分のiPhoneでも動かしてみたい人向け)
実装の軽い説明
1. 基本,静止状態のOppaiCurveを描画して待機(パンジェスチャのイベント待ち)
2. ユーザのドラッグに応じて上下にOppaiCurveを歪ませる
3. ユーザが指を離したらアニメーションを開始(パンジェスチャーの解除:アニメーション中はジェスチャを受け付けない)
- 減衰しながら揺れるように,OppaiCurveのキーフレームアニメーションを設定する
-> 上にドラッグして離した場合は下方向に揺れ始めるようにし,その逆の場合は上に揺れ始めるようにする
4. アニメーションが終了したら,パンジェスチャを再登録
キーフレームアニメーション
キーフレームアニメーションにはCAKeyframeAnimation
を使います.普通はCAMediaTimingFunction
を使ってキーフレーム間を補間するのですが,今回はOppaiCurveが複雑な関数(実際にはベジェ曲線)だったため,パラパラ漫画のようなコマ送りアニメーションになるようCAMediaTimingFunction
を使わず,CAKeyframeAnimation.calculationMode = .discrete
としました.
参考
- おっぱい関数 by CHARTMAN
- CAKeyframeAnimationを使ってUIBezierPathをアニメーションさせる
- How to create custom easing function with Core Animation?
また,CHARTMANさんにTwitterで直接アドバイスをいただき,さらに減衰振動のデモまで作っていただきました(お優しい...
所感
CHARTMANさんのアドバイスもあり,比較的簡単におっぱい関数を揺らすことができたのですが,もっと柔軟にプルプルさせたかったというのが本音です.曲線の知識はほぼ高校3年までの二次曲線でストップしているので.自在に曲線をアニメーションさせるには,もう少し深く数学の勉強をする必要がありそうです.