UIViewとCALayerの違いは何ですか?


103

どちらもほとんど同じ属性を持ち、どちらも異なる種類のアニメーションをサポートし、どちらも異なるデータを表します。UIViewとCALayerの違いは何ですか?

回答:


224

iOSでは、すべてのUIViewがCore Animation CALayerによってサポートされているため、UIViewを使用する場合、気付かない場合でもCALayerを処理しています。コアアニメーションが存在する前に進化したMacのNSViewsとは異なり、UIViewsはこれらのCALayerの軽量ラッパーであることを目的としています。

同様の質問で述べたように、「Mac / iPhoneでCALayerをいつ使用するのですか?」、CALayersを直接操作しても、UIViewsに比べてパフォーマンスが大幅に向上するわけではありません。UIViewsの代わりにCALayersを使用してユーザーインターフェイス要素を作成する理由の1つは、Macに非常に簡単に移植できることです。UIViewはNSViewとは非常に異なりますが、CALayerは2つのプラットフォームでほぼ同じです。Core Plotフレームワークが他のUI要素の代わりにCALayersを使用してグラフをレイアウトするのはこのためです。

UIViewsがCALayersよりも優れている点の1つは、ユーザー操作の組み込みサポートです。これらは、CALayerの階層を管理する場合に自分で構築する必要があるタッチやその他の関連アクションのヒットテストを処理します。これを自分で実装するのはそれほど難しいことではありませんが、CALayerのみのインターフェイスを構築するときに作成する必要がある追加のコードです。

基本的なUIViewクラスが許可するよりも複雑なアニメーションを実行する場合、UIViewの基になるレイヤーにアクセスする必要があることがよくあります。iOS SDKが成熟するにつれて、UIViewのアニメーション機能は成長しましたが、基礎となるCALayerと対話することによって最善の方法がまだいくつかあります。


40

Ray Wenderlichブログ(チュートリアル)から

CALayersは、視覚的なコンテンツを含む画面上の長方形を表すクラスです。「しかし、ちょっと待ってください」とあなたは言うかもしれません、「それがUIViewの目的です!」それは本当ですが、トリックがあります。すべてのUIViewには、描画するルートレイヤーが含まれています。


33

簡単に言えば、UIViewはUIResponderから継承し、ユーザーからのイベントを処理し、NSObjectから継承するCALayerを含み、主にレンダリング、アニメーションなどに焦点を当てています。


7

UIViewはのコンテナですCALayers。を使用しUIKitます。

CALayerここでコンテンツを描画します。使用するCoreGraphics

機能のようなカスタムコントロールを使用する場合は、正確なネイティブレンダリングのために、より多くのレイヤーを含む単一のビューを先に進めるとよいでしょう。以来CALayersより無重力ですUIView

MacとiOSの共通のスケルトンを作成するには、を使用してアプリの設計に従いますCALayers。両方のプラットフォームで利用できるため。

UIViewデリゲートを使用して達成タッチイベントなどの機能を持つ-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)eventtochesStartイベントや他の同様UIKitの機能を。

CALayersコアグラフィックスの知識を使用して作業しますUIView。単純なビューのレンダリングには十分です。


0

大きな違いは、UIViewがモバイルデバイスのCocoaTouch用に設計されていることです。それはCALayerが提供しなかったいくつかのイベントハンドラーを追加します。


0

UIView:ビューには、より複雑な階層レイアウトがあります。タップ、ピンチ、クリックなどのユーザーインタラクションを受け取ることができます。UIViewsの操作はメインスレッドで行われ、CPUパワーを使用していることを意味します。

CALayer:一方、レイヤーの階層は単純です。つまり、画面の描画が速く、描画も速くなります。ビューとは異なり、レスポンダーチェーンのオーバーヘッドはありません。レイヤーはGPUに直接描画されます。CPUに負担をかけることなく、別のスレッドで発生します。

詳細:https : //medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.