2012-04-25 15 views
0

uiimageviewの回転アニメーションを作成する必要があります。私が考えることができる最も良いアナロジーは、壁にぶら下がっている絵です。画像を保持している爪は、画像の上部に配置されています。iPhoneビュー回転/スイングアニメーション

私が画像を押した場合、画像のわずかな揺れの動きをモデル化して、最終的にその開始位置に戻るまでします。

私は最初にビューのアンカーポイントを変更することから始めなければならないことは知っていますが、残りの問題にどのようにアプローチするのかは分かりません。私はCABasicAnimationを使用することができますが、私はそれがあまりにも複雑/過度の単純なアニメーションを得るには不思議ですね。

提案がありますか?

[EDIT]

このanswerが実際にブロックを使用して、うまく私のために働いた:)

答えて

3

私はtransform.rotationプロパティをアニメーション化するCABasicAnimationを使用して、右のタイミング機能を選択する非常に困難であるべきとは思いません。

CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    [anim setToValue:[NSNumber numberWithFloat:startAngle]]; 
    [anim setFromValue:[NSNumber numberWithDouble:endAngle]]; 
    [anim setDuration:duration]; 
    [anim setRepeatCount:count]; 
    [anim setAutoreverses:YES]; 
    [anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
    [selectedCoverView.layer addAnimation:anim forKey:@"SwingingRotation"]; 

重要なポイントは正しいタイミング機能を選択することです。あらかじめ定義されたもののどれもOKでない場合は、+ (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y(制御点でベジェ曲線を定義する)を使用して任意のタイミング関数を定義できます。

+0

ありがとう@sergio私はあなたの提案をうまく実装しています。そのスイングは半スイングしか行いません。つまり、ビューは片側にスイングして元の位置に戻りますが、反対側にスイングすることはありません。スイングをもう一方の側にアニメーション化するために2番目のブロックを作成する必要なく、上記を使用して完全なスイングを行う方法はありますか?再度、感謝します! – bennythemink

+0

あなたは正しいです:反復回数を指定するには '[anim setRepeatCount:count];'を追加してください(できるだけ多くの場合NSUIntegerMax')。 – sergio

+0

ちょっと@sergioおそらく十分に説明できませんでした。つまり、ビューが0度から(たとえば)20度までスイングし、上のコードで0度に戻ることを意味します。しかし、0度から20度まで0度から-20度まで振り、最後には0度に戻す必要があります。 – bennythemink

関連する問題