4

UIView のブロック ベースのアニメーション メソッドにカスタムのイージング カーブがないため、より高度なカーブが必要な場合は Core Animation になります。

カテゴリをオンにしてこれを行う方法については、Core Animation を使用してカスタム イージング関数を作成する方法CAKeyframeAnimationで説明しています。.

UIViewコードをクリーンで保守しやすい状態に保つために、さらに一歩進んでのブロック ベースのメソッドを再実装し、イージング カーブ関数を記述するブロックを含めたいと思います。結果のカテゴリ onUIViewは次のようになります。

+ (void)animateWithDuration:(NSTimeInterval)duration easingCurveFunction:(double(^)(double))function  animations:(void (^)(void))animations;

Apple がブロック ベースのアニメーション メソッドをどのように実装しているかを知っている人はいますか?

4

2 に答える 2

0

Appleがブロックベースのメソッドをどのように実装しているかはわかりませんが、BlocksKitのソースコードを読んで、あなたが言及したメソッドを実装するには、おそらく次のことが必要であることがわかりました:

  1. UIView などの UIView カテゴリを宣言する (ブロック)
  2. カテゴリで、NSTimer プロパティを追加して、指定された期間でタイマーを起動/無効化します
  3. カテゴリにブロック プロパティを追加して、easingCurveFunction ブロック コードを保持します。
  4. カテゴリに別のブロックを追加して、アニメーション ブロック コードを保持します。
  5. ブロックベースのメソッドで、タイマーを設定し、ブロック コードをプロパティに保存します。
  6. タイマーが起動したら、easingCurveFunction ブロックとアニメーション ブロックを実行します。これらはプロパティに保持されます。

私自身のブロックベースのメソッドを Apple のクラスに追加するときは、実際にこの方法に従いました。

于 2012-09-22T15:31:31.910 に答える