3

少しひねりを加えた CAKeyframeAnimation を作成しようとしています。キーフレーム アニメーションの一部を、最後までまっすぐ進む前にしばらくループさせたい。例えば:

Intro: play keyframes 0 to 10
Loop:  play keyframes 11 to 15 (repeat for a while)
End:   play keyframes 16 to 20

CAKeyframeAnimation は十分な柔軟性を提供していないようです。そのため、これを解決する唯一の方法は、3 つの異なるキーフレーム アニメーションを提供することです。

そこにもっと良い解決策はありますか?

4

1 に答える 1

2

誰もこれに答えようとしなかったので、まだ解決していないと仮定して、私はそれをバッシュしようと思いました.

まず、アニメーションの状態を格納するプロパティを作成します。すなわち

NSUIneteger animationState; 

格納するもの: 0 = idleState; 1 = 開始状態。2 = ループ状態。3 = 終了状態;

また、ループ アニメーションを停止するタイミングを決定するために BOOL も作成します。

BOOL haltAnimation;

次に、animationState を 0 に初期化します。アニメーションを開始したら、最初の CAAnimation オブジェクトを作成し、デリゲートを必ず self に設定します。haltAnimation を false に初期化します。

animationDidStart メソッド (デリゲートの実装で必要) には、次のようなものがあります。

-(void)animationDidStart {
    switch(animationState) {
        case 0:
            animationState = 1;
            break;
        case 1:
            animationState = 2;
            break;
        case 2:
            if(haltAnimation)
                animationState = 3;
    }
}

次に、アニメーション終了デリゲート メソッドで、次のようにします。

-(void)animationDidFinish {
    swtich(animationState) {
        case 1:
            /*apply stage 2 animation and assign delegate to self*/
            break;
        case 2:
            if(!haltAnimation) {
                /*apply stage 2 animation and assign delegate to self*/
            } else {
                /*apply stage 3 animation and assign delegate to self*/
            }
            break;
        case 3:
            animationState = 0;
            break;
    }
}

次に何が起こるかというと、haltAnimation を true に設定するまで、ステージ 2 のアニメーションが任意の長さだけ続きます。

これはすべてテストされておらず、カフから外れていることに注意してください。他の誰かに、より良いデザイン パターンを提供してもらいます。

于 2011-01-27T22:45:35.883 に答える