どちらもほとんど同じ属性を持ち、異なる種類のアニメーションをサポートし、異なるデータを表します。 UIViewとCALayerの違いは何ですか?
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と対話することで最適な方法がいくつか残っています。
Ray Wenderlichブログから( Tutorial )
CALayersは、視覚的なコンテンツを含む画面上の四角形を表す単純なクラスです。 「でもちょっと待って」と言うかもしれませんが、「それがUIViewの目的です!」
簡単に言えば、UIViewはUIResponderを継承し、ユーザーからのイベントを処理し、NSObjectを継承するCALayerを含み、主にレンダリング、アニメーションなどに焦点を当てています。
UIView
はCALayers
のコンテナです。 UIKit
を使用します。
CALayer
内容を描画します。 CoreGraphics
を使用する
機能のようなカスタムコントロールを使用する場合は、正確なネイティブレンダリングのために、より多くのレイヤーを含む単一のビューを使用することをお勧めします。 CALayers
はUIView
よりも軽量なので。
MacとiOSの共通のスケルトンを作成するには、CALayers
を使用してアプリの設計に従ってください。両方のプラットフォームで利用できるため。
UIView
デリゲート-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
、tochesStart
のようなイベントおよびその他のUIKit
機能を使用して達成されるタッチイベントのような機能を備えています。
CALayers
を使用するには、Core Graphicsの知識を使用します。単純なビューのレンダリングには、UIView
で十分です。
大きな違いは、UIViewはモバイルデバイス上のCocoaTouch用に設計されていることです。 CALayerが提供しなかったイベントハンドラを追加します。