CALayer、隠しアニメーション、どうやってデフォルトの隠しアニメーション効果をオフにしますか?

2750 ワード

RedRainの:http://www.jianshu.com/users/29e03e6ff407/latest_アートレス
CALayer
  • iOSでは、タッチできるものは基本的にUID Viewであり、ボタン一つ、テキストラベル一つ、テキスト入力ボックス一つ、アイコン一つなど、UID View
  • である.
  • 実はUID Viewがスクリーンに表示できるのは、その内部の一つのレイヤー
  • のためです.
  • は、UID Viewオブジェクトを作成すると、UID View内部に自動的にレイヤー(すなわち、CALayerオブジェクト)を作成し、UID Viewのlayer属性を介して、このレイヤ
  • にアクセスすることができます.
  • UID Viewが画面に表示する必要があるときは、ドラフトRect:メソッドを呼び出して描画し、すべてのコンテンツを自分のレイヤーに描画し、描画が完了すると、システムはレイヤーを画面にコピーしてUID Viewの表示を完了します.
  • 言い換えれば、UIView自体は表示機能を備えておらず、その内部の層のみが表示機能
  • を有しているということです.
    CALayerの基本使用
  • CALayerオブジェクトを操作することにより、UID Viewのいくつかの外観属性を簡単に調整することができます.例えば、
  • シャドウ
  • 円角の大きさ
  • フレーム幅と色
  • は、レイヤーにアニメーションを追加して、よりクールな効果を実現することもできます.
    CALayerの属性
         
    @property CGRect bounds;
    
      (     ,   anchorPoint  )
    @property CGPoint position;
    
      (x,y     0-1),   position   
    @property CGPoint anchorPoint;
    
        (CGColorRef  )
    @property CGColorRef backgroundColor;
    
        
    @property CATransform3D transform;
    
        (CGColorRef  )
    @property CGColorRef borderColor;
    
        
    @property CGFloat borderWidth;
    
        
    @property CGColorRef borderColor;
    
      (       CGImageRef)
    @property(retain) id contents;
    
    
    CALayerに関する疑惑
  • まず
  • です.
  • CALayerはQuartzCoreフレームワークに定義されている
  • である.
  • CGImageRef、CGColorRefの2種類のデータタイプは、CoreGraphicsフレーム内に定義されている
  • である.
  • UICColor、UImageはUICKフレームワークに定義されている
  • である.
  • 、次に
  • です.
  • QuartzCoreフレームとCoreGraphicsフレームは、プラットフォームをまたいで使用できます.iOSとMac OS Xでは、
  • が使用できます.
  • ですが、UICKtはiOSでしか
  • を使用できません.
  • 移植可能性を保証するために、QuartzCoreはUImage、UICColorを使用できません.CGImageRef、CGColorRef
  • しか使用できません.
    UID ViewとCALayerの選択
  • は、CALayerを通じて、UImageViewと同じインタフェース効果を作り出します.
  • CALayerとUID Viewは同じ表示効果を実現できるなら、一体誰を選ぶべきですか?
  • 実は、CALayerとUID Viewを比べて一つのイベント処理の機能が多くなりました.つまり、CALayerはユーザのタッチイベントを処理できません.UID Viewは
  • です.
  • ですので、表示されたものがユーザーと対話する必要があるなら、UID Viewを使います.ユーザーとの対話が必要でないなら、UID ViewまたはCALayerを使ってもいいです.
  • もちろん、CALayerの性能は少し高くなります.事件処理の機能が足りないので、もっと軽量
  • です.
    隠しアニメーション
  • UID Viewの内部はデフォルトでCALayerに関連しています.このLayerをRoot Layerと呼ぶことができます.
  • のすべての非Root Layer、つまり手動で作成されたCALayerオブジェクトには、隠蔽アニメーション
  • が存在します.
  • 隠アニメとは?
  • Root Layer以外の部分的属性を修正すると、デフォルトでは自動的にいくつかのアニメーション効果が発生します.
  • で、これらの属性はAnimable Proptiesと呼ばれています.
  • いくつかのよくあるAnimable Proptiesを列挙します.
  • bounds:CALayerの幅と高さを設定するために使用されます.この属性を変更すると拡大縮小動画が生成されます.
  • background Color:CALayerの背景色を設定するために使用されます.この属性を変更すると背景色のグラデーションが発生します.
  • position:CALayerの位置を設定するために使用されます.この属性を変更すると並進アニメーションが発生します.
  • は、アニメーション事務によってデフォルトの暗黙的アニメーション効果
  • をオフにすることができます.
     [CATransaction begin];
     [CATransaction setDisableActions:YES];
     self.myview.layer.position = CGPointMake(10, 10);
     [CATransaction commit];