検索
ホームページウェブフロントエンドhtmlチュートリアルCoreAnimationアニメーションについて(前編)_html/css_WEB-ITnose

Core Animation アニメーションについて (パート 1)

1. UIView と CALayer

UIView と CALayer については誰もがよく知っているはずです。通常、UIView はビュー ツリーの構造によって構成されていると理解します。実際、UIView は別のレイヤー ツリー (つまり、CALayer ツリー) を管理および維持します。実際に画面上に表示され、アニメーション化されるのは CALayer オブジェクトです。

CALayer が View の内部実装の詳細である場合、なぜ Apple は UIView の別の層をカプセル化するのでしょうか? UIView と CALayer の違いは何ですか? UIView と CALayer の最大の違いは、UIView がユーザー操作を処理できることです (クリック イベントとして)、CALayer は特定のレスポンダー チェーンを認識しないため、イベントに応答できません。
応答イベントを UIView に抽象化する理由は、基礎となるコードのセット (つまりレイヤー) を Mac OS と共有するためです。 Mac OS には NSView クラスがあり、iOS とは異なる一部のユーザー イベント (キーボードやマウスなど) を処理するために使用されます。

ほとんどの単純なシーンでは、UIView が要件を満たすことができます。では、CALayer を勉強することに何の意味があるのでしょうか? CALayer は UIView のようなタッチ イベントを処理できないことを以前に学びました。 UIView には、公開されていない CALayer 関数もいくつかあります。

  • シャド​​ウ、丸い角、境界線

  • 3D 変換 (UIView は 2D 変換のみ)

    を取得できます。 view.layer を通して。

  • CALayer には、さまざまな効果を実現できる特別なサブクラスが多数あります。CALayer の特定のサブクラスを見てみましょう。 UIView の CALayer カテゴリを変更することも、別の CALayer インスタンスをそれに追加することもできます。この章では主にアニメーションに焦点を当てますので、今のところはあまり詳しく説明しません。
  • 2. 暗黙的アニメーション

  • CALayer と UIView を理解すると、暗黙的アニメーションを見て、システムがどのような状況でアニメーションを自動的に生成するかを理解できます。どのような状況で自分でアニメーションを追加する必要がありますか。
  • 暗黙的なアニメーションは実際にモノによって生成されます。 まずモノの概念を見てみましょう:

  • 2.1 トランザクション
  • トランザクションは実際には、一連の属性アニメーション コレクション、CALayer Changes の属性を含めるためにコア アニメーションによって使用されるメカニズムです。はすぐには発生しませんが、トランザクションがコミットされた後にアニメーションを使用して新しい値に移行します。

    コア アニメーションは、実行ループ サイクルごとに新しいトランザクションを自動的に開始します。実行ループ サイクル内の
  • プロパティ
  • への変更は集中して、0.25 秒間アニメーション化されます。

    たとえば、ビューに新しいレイヤーを追加し、その 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 に関連付けられたレイヤーでは暗黙的なアニメーションが無効になっていることに注意してください。現時点では、アニメーションを自分たちで実装する必要があります:
  • CATransaction の +begin および +commit を通じて、新しいトランザクションをスタックにプッシュまたはポップできます (+beginAnimations:context: や +beginAnimations:context: などの UIView のいくつかのショートカット メソッドを使用することもできます)。 +animateWithDuration:アニメーション:、それらは本質的に同じです)、
新しいトランザクションでは、アニメーションの持続時間など、アニメーション関連の設定を変更できます。これらの設定は現在のトランザクションに対してのみ有効であり、次のトランザクションには影響しません。デフォルトの実行ループ。

//对View做动画,需要包含在事物中[CATransaction begin];self.view.backgroundColor = [UIColor yellowColor];     //改变view颜色[CATransaction setAnimationDuration:1];             //修改本次事务的动画时间[CATransaction setCompletionBlock:^{                   //动画结束后回调    NSLog(@"animation completed");}];[CATransaction commit];  //提交动画
2.2 modelLayer とpresentationLayer
上記の部分から、CALayer のプロパティが変更されると、アニメーション期間を通じて徐々に更新されることがわかり、backColor の開始値と終了値を設定するだけです (赤から黄色)。それでは、アニメーションの中間状態の backColor を取得する方法はあるのでしょうか?

答えは「はい」です。modelLayer とpresentationLayer という 2 つの概念を理解する必要があります。

ほとんどの場合、作成する CALayer インスタンスは、modelLayer (データ レイヤーと呼ぶこともできます) を参照します。レイヤ オブジェクトに対して -modelLayer を呼び出すと、通常は -self が返されます。レイヤーのプロパティが変更されると、modelLayer のプロパティ値がすぐに変更されます (アニメーションが開始される前に)。上記の例では、modelLayer の値が赤から黄色にすぐに変更されます。

presentationLayer はプレゼンテーション レイヤーと呼ばれ、実際には modelLayer のコピーであり、常に画面に表示されるレイヤーの実際の値を表します。つまり、アニメーション処理中のレイヤーの中間状態の属性値は、presentationLayer を通じて取得できます。

presentationLayer は、レイヤーが初めて画面に表示されるときにのみ作成されることに注意してください。それ以前は、presentationLayer は nil を返します。

要約すると


CAlayer は UIView の基礎となる実装であり、UIView は一部のユーザー タッチ イベントを処理できるのに対し、CALayer はより豊富な基礎となる機能を提供することがわかりました。

  • CALayer プロパティの変更では、runloop には暗黙的なアニメーション用のデフォルトのものがあり、UIView ではプライベート アニメーションが無効になっていますが、新しいアニメーション効果を送信することで、UIView に制御可能なプロパティの変更を与えることができます。

  • modelLayer のプロパティは変更直後に最終値に変更されるのに対し、presentationLayer は段階的な変更プロセスを受けることがわかりました。これは一部のインタラクティブ アニメーションに非常に役立ちます。

  • 表示アニメーション、レンダリング ツリーなど、将来的に他のコア アニメーションのことについて話す可能性があります。

    転載する場合は出典を明記してください、私のブログ: luoyibu

    声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    HTMLを超えて:Web開発のための重要なテクノロジーHTMLを超えて:Web開発のための重要なテクノロジーApr 26, 2025 am 12:04 AM

    強力な機能と優れたユーザーエクスペリエンスを備えたWebサイトを構築するには、HTMLだけでは十分ではありません。次のテクノロジーも必要です。JavaScriptは、Webページに動的とインタラクティブ性を与え、リアルタイムの変更がDOMを操作することで達成されます。 CSSは、美学とユーザーエクスペリエンスを向上させるために、Webページのスタイルとレイアウトを担当しています。 React、Vue.JS、Angularなどの最新のフレームワークとライブラリは、開発効率とコード組織構造を改善します。

    HTMLのブール属性とは何ですか?いくつかの例を挙げてください。HTMLのブール属性とは何ですか?いくつかの例を挙げてください。Apr 25, 2025 am 12:01 AM

    ブール属性は、値なしでアクティブ化されるHTMLの特別な属性です。 1.ブール属性は、無効化された入力ボックスを無効にするなど、存在するかどうかによって、要素の動作を制御します。 2.彼らの実用的な原則は、ブラウザが異なっているときに属性の存在に応じて要素の動作を変更することです。 3.基本的な使用法は、属性を直接追加することであり、高度な使用法はJavaScriptを介して動的に制御できます。 4.一般的な間違いは、値を設定する必要があると誤って考えており、正しい執筆方法は簡潔にする必要があります。 5.ベストプラクティスは、コードを簡潔に保ち、ブールのプロパティを合理的に使用して、Webページのパフォーマンスとユーザーエクスペリエンスを最適化することです。

    HTMLコードをどのように検証できますか?HTMLコードをどのように検証できますか?Apr 24, 2025 am 12:04 AM

    HTMLコードは、オンラインバリデーター、統合ツール、自動化されたプロセスを使用するとクリーンになります。 1)w3cmarkupvalidationserviceを使用して、HTMLコードをオンラインで確認します。 2)リアルタイム検証のためにVisualStudiocodeにhtmlhint拡張機能をインストールして構成します。 3)HTMLTIDYを使用して、建設プロセスでHTMLファイルを自動的に検証およびクリーニングします。

    HTML対CSSおよびJavaScript:Webテクノロジーの比較HTML対CSSおよびJavaScript:Webテクノロジーの比較Apr 23, 2025 am 12:05 AM

    HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

    マークアップ言語としてのHTML:その機能と目的マークアップ言語としてのHTML:その機能と目的Apr 22, 2025 am 12:02 AM

    HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

    HTML、CSS、およびJavaScriptの未来:Web開発動向HTML、CSS、およびJavaScriptの未来:Web開発動向Apr 19, 2025 am 12:02 AM

    HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

    HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

    Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

    HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

    HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    PhpStorm Mac バージョン

    PhpStorm Mac バージョン

    最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター