UIViewとCALayerの違いははっきりしている


もしこの招待状がすべてのコードの中でもたらしたページの効果を与えることができるならばもっとよく理解して後で私が自分で書くなどの紹介は中から教訓を吸収することができます
庭の中の1篇のCALayerとUIViewの関係について記録します
CALayerはCore Animationの部分に属する内容で、重要でよく理解できません.以下は園で見た文章の抜粋です.
1.UIViewはiOSシステムのインタフェース要素の基礎であり、すべてのインタフェース要素はそれから継承されている.それ自体は完全にCoreAnimationによって実現されています.実際の図面部分は、CALayerクラスによって管理されています.UIView自体はCALayerのマネージャのように、frame、boundsなど、図面や座標に関する属性にアクセスし、実際には内部にはCALayerに含まれる関連属性にアクセスしています.
2.UIViewには、プライマリCALayerインスタンスを返す重要なプロパティlayerがあります.
//     ,  UIView   layer  
CALayer *layer = myView.layer

UIViewから継承されたすべてのオブジェクトがこの属性を継承します.これは、Navigation bars、Tables、Text boxesなどの他のViewクラスでも、変換、スケール、回転が可能であることを意味します.各UIVEewには1つのレイヤがあり、それぞれのコンテンツが最終的に画面に表示される方法を制御しています.UIViewのlayerClassメソッドは、メインlayerで使用されているクラスに戻ることができ、UIViewのサブクラスはこのメソッドをリロードすることで、UIViewに異なるCALayerを使用して表示させることができます.コードの例:
- (class)layerClass {
return ([CAEAGLLayer class]);
}

上記のコードは、あるUIViewのサブクラスがGLを使用して描画されるようにする.
3.UIViewのCALayerは、UIViewのサブViewツリー構造に類似しており、そのlayerにサブlayerを追加して、特定の特殊な表現を完了することもできる.すなわちCALayer層はネスト可能である.サンプルコード:
grayCover = [[CALayer alloc] init];
grayCover.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];
[self.layer addSubLayer:grayCover];

上記のコードは、ターゲットのViewに黒い透明なフィルムを塗布する効果があります.
4.UIViewのlayerツリーはシステム内部にあり、3部のcopyが維持されている.それぞれ論理ツリーで、ここではコードが操作できます.アニメーションツリーは、中間層であり、システムはこの層で属性を変更し、様々なレンダリング操作を行う.現在画面に表示されているコンテンツであるツリーを表示します.
5.アニメーションの動作:UIDIewのsubLayer(主でないLayer)属性を変更すると、自動的にアニメーション生成が行われ、アニメーション持続時間のデフォルト値は0.5秒のようです.
6.座標系:CALayerの座標系はUIViewより1つのanchorPoint属性が多く、CGPoint構造で表され、値域は0~1であり、比例値である.この点は様々なグラフィック変換の座標の原点であり、layerのpositionの位置を変更します.デフォルト値は{0.5,0.5}であり、layerの中央にあります.あるlayer.anchorPoint = CGPointMake(0.f,0.f); このように設定すると、layerの左上隅だけが元の中間位置に移動され、あるlayer.position = CGPointMake(0.f,0.f);
最後:layerはフィレット表示(cornerRadius)を設定したり、シャドウ(shadowColor)を設定したりできます.ただし、layerツリーのlayerにフィレットが設定されている場合、ツリーのすべてのlayerのシャドウ効果は表示されません.したがって、フィレットとシャドウがある場合は、トランスフォーム方法は2つのオーバーラップUIViewしかできません.1つのlayerはフィレットを表示し、1つのlayerはシャドウを表示します.
7.レンダリング:レイヤが更新されると、変更はすぐに画面に表示されません.すべてのレイヤが準備されている場合、setNeedsDisplayメソッドを呼び出して表示を再描画できます.
[gameLayer setNeedsDisplay];

画面領域の一部を再描画するには、setNeedsDisplayInRect:メソッドを使用して、CGRect構造の領域を更新します.
[gameLayer setNeedsDisplayInRect:CGRectMake(150.0,100.0,50.0,75.0)];

Core Graphicsフレームワークでレンダリングを実行する場合は、Core Graphicsの内容を直接レンダリングできます.renderInContext:でこのことをします.
[gameLayer renderInContext:UIGraphicsGetCurrentContext()];

8.変換:1つのレイヤに3 Dまたはアフィニティ変換を追加するには、レイヤのtransformまたはaffineTransformプロパティをそれぞれ設定します.
characterView.layer.transform = CATransform3DMakeScale(-1.0,-1.0,1.0);

CGAffineTransform transform = CGAffineTransformMakeRotation(45.0);
backgroundView.layer.affineTransform = transform;

9.変形:Quartz Coreのレンダリング機能により、2 D画像を3 Dのように自由に操作できます.画像は、3 D座標系で任意の角度で回転、スケール、および傾斜することができます.CATransform 3 Dの一連の方法は、いくつかのマジック的な変換効果を提供しています.