objective-c - フェードイン - uiview アニメーション しない




アニメーションなしでCAShapeLayerを変更する (2)

デフォルトのアニメーションを使わずにstrokeEndプロパティを設定したいのですが、アニメーションはまったくありません。 私はこれを行う方法を見つけることを試みるために周りを見回しましたが、すべてはプロパティをアニメートする方法についてのようです。


Core Animationsの用語では、アニメーションのより一般的な用語は「アクション」です。 たとえば、 CAAnimationCAActionプロトコルに準拠していることがCAActionます。 また、それらを無効にする(アニメーションを無効にする)ときに使用される用語「アクション」も表示されます。

レイヤーの動作を変更するにはさまざまな方法があります。 それらの多くはCALayer actionForKey:ドキュメンテーション (以下の抜粋) の議論でかなりよく文書化されています。 それらのいくつかはサブクラス化するときにより関連性があります(そしてサブクラスでactionForKey:をオーバーライドして新しいキーにもっと暗黙のアクションを追加することもできます。

このメソッドは、レイヤーに関連付けられているアクションを次の順序で検索します。

  1. レイヤにデリゲートがあり、そのデリゲートが「レイヤのフィルタへのアクセス」メソッドを実装している場合、レイヤはそのメソッドを呼び出します。 代理人は、次のいずれかを実行する必要があります。
    • 与えられたキーに対するアクションオブジェクトを返します。
    • アクションを処理しない場合はnil返します。
    • NSNullオブジェクトがアクションを処理しないために検索を終了する必要がある場合は、 NSNullオブジェクトを返します。
  2. レイヤーはレイヤーのactionsディクショナリを調べます。
  3. レイヤーは `style辞書内でキーを含むアクション辞書を探します。
  4. レイヤはその `defaultActionForKey:メソッドを呼び出してクラス定義のアクションを探します。
  5. レイヤーは、Core Animationによって定義された暗黙のアクションを探します。

アニメーションを無効にしたいときに最も興味深い2つの方法は次のとおりです(2つの方法は少し違った目的で使用されるため、2つの方法が異なります)。

  1. CATransactionを使用したアクションの無効CATransaction (上記には記載されていません)
  2. アクション辞書の@"strokeEnd"キーに[NSNull null]を設定する(上記の2番)

アクションを無効にする

トランザクションを使用してアニメーションを無効にするのは、アニメーションを他の場所に配置したまま、さまざまなプロパティに対して一時的にアクションを無効にしたい場合に便利です。 コードでは、このようになります。

[CATransaction begin];
[CATransaction setDisableActions:YES];
// change your property here 
yourShapeLayer.strokeEnd = 0.7;
[CATransaction commit]; // animations are disabled until here...

アクション辞書を変更する

レイヤーのアクション辞書を変更することで、1つ以上のキーのデフォルトのアニメーションを恒久的に変更できます。 [NSNull null]設定すると、アニメーションがなくなり、レイヤはデフォルトのアニメーションを他の場所で探すのをやめるようになります。 これを使用してアニメート可能なプロパティを追加することもできます。 アクション辞書を使用してアニメーションを削除すると、次のようになります。

yourShapeLayer.actions = @{@"strokeEnd": [NSNull null]};
yourShapeLayer.strokeEnd = 0.7; // this won't have an animation

次のようなことができます。

NSDictionary *actions = @{@"strokeEnd": [NSNull null]};
yourShapeLayer.actions = actions;

これはそれがそれをするのでそれは特性のために活気づけないでしょう。 これに追加することで、アニメートしないように追加のプロパティを指定することもできます。

NSDictionary *actions = @{@"strokeEnd": [NSNull null], @"position": [NSNull null], @"position": [NSNull null]};




calayer