UIViewのアニメーションを滑らかに動かす

UIViewのsetAnimationCurve:(UIViewAnimationCurve)で指定できるイージングはたったの四種類で表現力に乏しい。そこでもっと自由にUIViewを動かしたい場合、CAMediaTimingFunctionを指定してLayerを動かすとうまくいく。

UIView *moveView;
CALayer *moveLayer;
CABasicAnimation *moveAnim;
CAMediaTimingFunction *timingFunc;


timing = [CAMediaTimingFunction functionWithControlPoints:0.3f :0.8f :0.8f :1.0f];//(0,0),(0.3,0.8),(0.8,1.0),(1,1)の四点で描かれるベジエ曲線様のイージング


moveLayer = moveView.layer;
moveAnim = [CABasicAnimation animationWithKeyPath:@"position"];//Animatableなプロパティならposition以外でも可能
moveAnim.timingFunction = timing;
//moveAnim.* = * //いろいろ省略
[moveLayer addAnimation:moveAnim forKey:kCATransition];

これで指定できるイージングは四点で指定されるベジエ曲線状のものだけなので、もっと細かく決めたい場合、アニメーションを分割するかCAKeyframeAnimationを使うかする必要があるようだ。