0

iOS 3.2 で非常にカスタムなアニメーションを実装する必要があるため、4.0 より前のブロック アニメーションも UIKit アニメーションも使用できません。Core Animation を使ってみました。

これが私のコードです:

[CATransaction begin];
[CATransaction setAnimationDuration: 3.0];
[CATransaction setDisableActions: YES];
someView.frame = CGRectMake(endX, 0, endWidth, height); 
// a lot of another property changes
[CATransaction commit];

残念ながら、それは機能しません。アニメーションなしで、ビューのサイズ/不透明度がすぐに変更されます。

これが私の試みです:

  • 新しいフレームをビューではなくそのレイヤーに設定しました(someView.layer.frame = ...)-ビューのサブビューのサイズが変更されなかったため、さらに悪化しました。
  • アクションの無効化オプションを YES と NO に設定しました。

ソリューション要件:

  • iOS 3.2 がサポートされている必要があります (ブロックなし)。
  • アニメーションは異なるビューに適用する必要があります (結果として、異なるレイヤーに適用されます)。
  • アニメーション カーブは非常に難しいので、定義済みのアニメーション カーブ (または、CA 言語では MediaTimingFunction) を使用できません。
4

3 に答える 3

1

投稿したコードは、アニメーションを明示的に無効にします。この行が犯人です:

[CATransaction setDisableActions: YES];

その呼び出しを行うことにより、トランザクションで行われたすべての変更は、アニメーション化せずにすぐにコミットされます。その行を取り除くと、変更がアニメーション化されます。

カスタム カーブが必要な場合は、他の誰かが提案したように、CABasicAnimation を使用することをお勧めします。実際、CAAnimation オブジェクトは単一のレイヤーにのみ適用されるため、複数の CAAnimation オブジェクトを作成する必要があります。

または、CATransaction メソッド setAnimationTimingFunction を使用して、作成したカスタム タイミング関数を渡すこともできます。CAMediaTimingFunction クラス リファレンスを参照してください。具体的には、メソッド functionWithControlPoints:::: を見てください。これにより、タイミング関数を表すベジエ曲線の制御点を指定してタイミング関数を作成できます。0,0 で開始し、1,1 で終了する単一の 3 次ベジエに制限されます。より複雑なタイミング機能を直接サポートするものはありませんが、より複雑な効果を実現するハックを見たことがあります。

于 2012-07-04T02:08:43.920 に答える
0

カスタム タイミング関数のみが必要な場合は、CABasicAnimation を使用して実行できます。カスタム タイミング関数 (指定できる 2 つの制御点を持つ (0,0) から (1,1) までのベジェ曲線) を作成できます。

これでは不十分な場合 (タイミング関数に 2 つ以上のコントロール ポイントが必要な場合)、CAKeyframeAnumation を使用する必要があります。values次に、 (プロパティ (配列)を使用して) 必要な数の値を指定できます。

どちらの場合も、キーパス「フレーム」のアニメーション オブジェクトを作成し、アニメーションをビュー レイヤーに追加します。プロパティを明示的にアニメーション化しても値は変更されないことに注意してください。そのため、アニメーション化して値を変更しない限り、アニメーション te フレームの後に元の値に戻ります。

于 2012-07-03T12:31:18.277 に答える
0

これがあなたが望むものかどうかはわかりませんが、UIView アニメーションを使用できます

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3.0];
someView.frame = CGRectMake(endX, 0, endWidth, height); 
// a lot of another property changes
[UIView commitAnimations];
于 2012-07-03T12:05:51.090 に答える