2

私はアニメーションを作成し、それを永遠に実行させます。そして今、ボタンをクリックした後に停止したいと思います。次に、アニメーションはボタンの画像を 0 度から 360 度まで回転させます。アニメーションを停止したいのですが、現在のサイクルを終了するアニメーションを作成します。たとえば、ボタンを 200 度回転させて停止ボタンをクリックした場合、アニメーションが 360 度回転してから停止するようにします。アニメーション コードは次のようになります。

CABasicAnimation *anim2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
anim2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
anim2.fromValue = [NSNumber numberWithFloat:0];
anim2.toValue = [NSNumber numberWithFloat:-((360*M_PI)/180)];
anim2.repeatCount = HUGE_VALF;
anim2.duration = 10;
[self.imgBtn.layer addAnimation:anim2 forKey:@"transform"];

ありがとう!

4

2 に答える 2

2

または、無限ループでアニメーションを再度トリガーする完了メソッドを使用して、単一のアニメーションを作成することもできます。

繰り返しを送信する前に、完了ルーチンにフラグをチェックさせます。

フラグが false の場合、アニメーションを再度トリガーしないでください。

次に、ボタン アクションで繰り返しフラグを false に設定します。現在のアニメーションは最後まで実行され、その後は繰り返されません。

于 2012-08-06T21:02:59.957 に答える
2

を使用してレイヤからアニメーションを取得できますが、animationForKey:その方法でアニメーションを変更することはできません。ドキュメントで説明されているように:

討論

返されたオブジェクトのプロパティを変更しようとすると、未定義の動作が発生します。

代わりにあなたがしなければならないこと

無限アニメーションを削除し、最終的な終了アニメーションを作成する別のアニメーションを追加する必要があります。

  1. プレゼンテーション レイヤーを使用して、レイヤーの現在の回転を決定します。
  2. 無限アニメーションを削除
  3. プレゼンテーション レイヤーから取得した値から、新しいアニメーションを終了状態に追加します。

プレゼンテーション層から値を取得する方法。

アニメーション中、モデルは変更されません (コア アニメーションを使用している場合)。代わりに、画面に表示されるのはレイヤー プレゼンテーション レイヤーです。他のレイヤーであるかのように、プレゼンテーション レイヤーから現在の値を取得して読み取ることができます。あなたの場合、次を使用して回転を取得できます[myLayer valueForKey:@"transform.rotation"];

于 2012-08-06T09:41:01.880 に答える