回答:
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と対話することによって最善の方法がまだいくつかあります。
UIView
はのコンテナですCALayers
。を使用しUIKit
ます。
CALayer
ここでコンテンツを描画します。使用するCoreGraphics
機能のようなカスタムコントロールを使用する場合は、正確なネイティブレンダリングのために、より多くのレイヤーを含む単一のビューを先に進めるとよいでしょう。以来CALayers
より無重力ですUIView
。
MacとiOSの共通のスケルトンを作成するには、を使用してアプリの設計に従いますCALayers
。両方のプラットフォームで利用できるため。
UIView
デリゲートを使用して達成タッチイベントなどの機能を持つ-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
、tochesStart
イベントや他の同様UIKit
の機能を。
CALayers
コアグラフィックスの知識を使用して作業しますUIView
。単純なビューのレンダリングには十分です。
大きな違いは、UIViewがモバイルデバイスのCocoaTouch用に設計されていることです。それはCALayerが提供しなかったいくつかのイベントハンドラーを追加します。
UIView:ビューには、より複雑な階層レイアウトがあります。タップ、ピンチ、クリックなどのユーザーインタラクションを受け取ることができます。UIViewsの操作はメインスレッドで行われ、CPUパワーを使用していることを意味します。
CALayer:一方、レイヤーの階層は単純です。つまり、画面の描画が速く、描画も速くなります。ビューとは異なり、レスポンダーチェーンのオーバーヘッドはありません。レイヤーはGPUに直接描画されます。CPUに負担をかけることなく、別のスレッドで発生します。
詳細:https : //medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5