web-dev-qa-db-ja.com

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

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

98
Oleg Danu

IOSでは、すべてのUIViewはCore Animation CALayerによってサポートされているため、UIViewを使用する場合は、気づかないかもしれませんが、CALayersを扱っています。 Core Animationが存在する前に進化したMac上のNSViewとは異なり、UIViewはこれらのCALayerの軽量ラッパーを目的としています。

同様の質問 "Mac/iPhoneでCALayerを使用する場合?" で説明しているように、CALayersを直接操作しても、UIViewsよりもパフォーマンスが大幅に向上することはありません。 UIViewsではなくCALayersを使用してユーザーインターフェイス要素を構築する理由の1つは、Macに非常に簡単に移植できることです。 UIViewsはNSViewsとは大きく異なりますが、CALayersは2つのプラットフォームでほとんど同じです。これが、Core Plotフレームワークが他のUI要素の代わりにCALayersを使用してグラフをレイアウトする理由です。

UIViewsがCALayersを介して提供することの1つは、ユーザーとの対話の組み込みサポートです。これらは、CALayersの階層を管理する場合に自分で構築する必要があるタッチおよびその他の関連アクションのヒットテストを処理します。これを自分で実装するのはそれほど難しくありませんが、CALayerのみのインターフェイスを構築するときに記述する必要がある余分なコードです。

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

216
Brad Larson

Ray Wenderlichブログから( Tutorial

CALayersは、視覚的なコンテンツを含む画面上の四角形を表す単純なクラスです。 「でもちょっと待って」と言うかもしれませんが、「それがUIViewの目的です!」

40
Mat

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

31
Forrest

UIViewCALayersのコンテナです。 UIKitを使用します。

CALayer内容を描画します。 CoreGraphicsを使用する

機能のようなカスタムコントロールを使用する場合は、正確なネイティブレンダリングのために、より多くのレイヤーを含む単一のビューを使用することをお勧めします。 CALayersUIViewよりも軽量なので。

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

UIViewデリゲート-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)eventtochesStartのようなイベントおよびその他のUIKit機能を使用して達成されるタッチイベントのような機能を備えています。

CALayersを使用するには、Core Graphicsの知識を使用します。単純なビューのレンダリングには、UIViewで十分です。

7
Gobi M

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

0
musixlemon