その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

放物線状にアニメーションさせる

というタイトルで、はじめて Qiita に投稿してみました。


http://qiita.com/items/2269


(Twitter/Github/Hatena と同じ shu223 というIDです)


ちなみにこんなコード。

+ (void)startJump:(UIView *)view
         startPos:(CGPoint)startPos
        targetPos:(CGPoint)targetPos
           height:(CGFloat)height
         duration:(NSTimeInterval)duration
{
    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.calculationMode = kCAAnimationPaced;
    pathAnimation.fillMode = kCAFillModeForwards;
    pathAnimation.removedOnCompletion = NO;

    CGMutablePathRef curvedPath = CGPathCreateMutable();
    CGPathMoveToPoint(curvedPath, NULL, startPos.x, startPos.y);
    CGPathAddCurveToPoint(curvedPath, NULL, 
                          startPos.x, startPos.y - height, 
                          targetPos.x, startPos.y - height, 
                          targetPos.x, targetPos.y);
    pathAnimation.path = curvedPath;
    CGPathRelease(curvedPath);

    pathAnimation.duration = duration;    

    [view.layer addAnimation:pathAnimation forKey:@"curveAnimation"];
}


ちなみに、アニメーション完了後に処理をさせたい場合は、CAAnimation のプロパティにある delegate を指定してやれば、

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

が呼ばれます。