ホームページ >ウェブフロントエンド >htmlチュートリアル >CoreAnimationアニメーションについて(前編)_html/css_WEB-ITnose
Core Animation アニメーションについて (パート 1)
CALayer が View の内部実装の詳細である場合、なぜ Apple は UIView の別の層をカプセル化するのでしょうか? UIView と CALayer の違いは何ですか? UIView と CALayer の最大の違いは、UIView がユーザー操作を処理できることです (クリック イベントとして)、CALayer は特定のレスポンダー チェーンを認識しないため、イベントに応答できません。
応答イベントを UIView に抽象化する理由は、基礎となるコードのセット (つまりレイヤー) を Mac OS と共有するためです。 Mac OS には NSView クラスがあり、iOS とは異なる一部のユーザー イベント (キーボードやマウスなど) を処理するために使用されます。
ほとんどの単純なシーンでは、UIView が要件を満たすことができます。では、CALayer を勉強することに何の意味があるのでしょうか? CALayer は UIView のようなタッチ イベントを処理できないことを以前に学びました。 UIView には、公開されていない CALayer 関数もいくつかあります。
を取得できます。 view.layer を通して。
2. 暗黙的アニメーション
暗黙的なアニメーションは実際にモノによって生成されます。 まずモノの概念を見てみましょう:
トランザクションは実際には、一連の属性アニメーション コレクション、CALayer Changes の属性を含めるためにコア アニメーションによって使用されるメカニズムです。はすぐには発生しませんが、トランザクションがコミットされた後にアニメーションを使用して新しい値に移行します。
コア アニメーションは、実行ループ サイクルごとに新しいトランザクションを自動的に開始します。実行ループ サイクル内のたとえば、ビューに新しいレイヤーを追加し、その backGroundColor を変更すると、色は即座には変化せず、0.25 秒 (アニメーションのデフォルトの継続時間) かけて徐々に変化することがわかります。
//CALayer的隐式动画- (void)viewDidLoad { [super viewDidLoad]; //创建一个红色的layer _layer = [CALayer layer]; _layer.frame = self.view.bounds; _layer.backgroundColor = [UIColor redColor].CGColor; [self.view.layer addSublayer:_layer];}- (IBAction)changeColor:(id)sender { //修改layer的颜色为黄色 此时,颜色是由红色渐变到黄色的 _layer.backgroundColor = [UIColor yellowColor].CGColor;}上記は、暗黙的なアニメーションが実行されるたびにデフォルトでトランザクションを開始し、CALayer のプライバシー アニメーションを完了する理由です。 UIView に関連付けられたレイヤーでは暗黙的なアニメーションが無効になっていることに注意してください。現時点では、アニメーションを自分たちで実装する必要があります:
//对View做动画,需要包含在事物中[CATransaction begin];self.view.backgroundColor = [UIColor yellowColor]; //改变view颜色[CATransaction setAnimationDuration:1]; //修改本次事务的动画时间[CATransaction setCompletionBlock:^{ //动画结束后回调 NSLog(@"animation completed");}];[CATransaction commit]; //提交动画2.2 modelLayer とpresentationLayer
ほとんどの場合、作成する CALayer インスタンスは、modelLayer (データ レイヤーと呼ぶこともできます) を参照します。レイヤ オブジェクトに対して -modelLayer を呼び出すと、通常は -self が返されます。レイヤーのプロパティが変更されると、modelLayer のプロパティ値がすぐに変更されます (アニメーションが開始される前に)。上記の例では、modelLayer の値が赤から黄色にすぐに変更されます。
presentationLayer はプレゼンテーション レイヤーと呼ばれ、実際には modelLayer のコピーであり、常に画面に表示されるレイヤーの実際の値を表します。つまり、アニメーション処理中のレイヤーの中間状態の属性値は、presentationLayer を通じて取得できます。
presentationLayer は、レイヤーが初めて画面に表示されるときにのみ作成されることに注意してください。それ以前は、presentationLayer は nil を返します。
CAlayer は UIView の基礎となる実装であり、UIView は一部のユーザー タッチ イベントを処理できるのに対し、CALayer はより豊富な基礎となる機能を提供することがわかりました。
CALayer プロパティの変更では、runloop には暗黙的なアニメーション用のデフォルトのものがあり、UIView ではプライベート アニメーションが無効になっていますが、新しいアニメーション効果を送信することで、UIView に制御可能なプロパティの変更を与えることができます。
modelLayer のプロパティは変更直後に最終値に変更されるのに対し、presentationLayer は段階的な変更プロセスを受けることがわかりました。これは一部のインタラクティブ アニメーションに非常に役立ちます。
表示アニメーション、レンダリング ツリーなど、将来的に他のコア アニメーションのことについて話す可能性があります。
転載する場合は出典を明記してください、私のブログ: luoyibu