iOS開發之CALayer介紹

來源:互聯網
上載者:User

標籤:商業   開發   縮放   inter   蘋果   方式   事務   邊框顏色   使用者   

CALayer簡介:
  • CALayer我們又稱它叫做層,CALayer類的概念與UIView非常類似,並且可以包含圖片、文本、背景色等。它與UIView最大的不同在於它不能響應使用者互動,可以說它根本就不知道響應鏈的存在,它的 API 雖然提供了 “某點是否在圖層範圍內的方法”,但是它並不具有響應的能力。

  • 在每一個UIView執行個體當中,都有一個預設的支援圖層layer,UIView負責建立並且管理這個圖層。實際上 UIView之所以能夠顯示,就是因為它裡面有這個一個層,才具有顯示的功能 ,UIView僅僅是對它的一層封裝,實現了CALayer的delegate,提供了處理事件互動的具體功能,還有動畫底層方法的進階API。可以說CALayer是UIView的內部實現細節。

UIView中的layer屬性
  • 在建立UIView對象時,UIView內部會自動建立一個圖層(即CALayer對象),通過UIView的layer屬性可以訪問這個層
    @property(nonatomic,readonly,retain) CALayer *layer;
  • CALayer類的屬性

    • 注意:CALayer是定義在QuartzCore架構中的,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

       寬度和高度@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;
    • 操作layer改變UIView和UIImageView外觀

      @interface ViewController ()@property (weak, nonatomic) IBOutlet UIView *yellowView;@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //設定邊框(邊框寬度往裡走的)    self.imageView.layer.borderColor = [UIColor redColor].CGColor;    self.imageView.layer.borderWidth = 3;    //設定陰影    self.imageView.layer.shadowColor = [UIColor blueColor].CGColor;    self.imageView.layer.shadowOpacity = 1;    //陰影的不透明度,預設是0    self.imageView.layer.shadowOffset = CGSizeMake(-10, 10);    self.imageView.layer.shadowRadius = 50;    //越大越模糊    //設定圓角半徑    self.imageView.layer.cornerRadius = 50;    //超過根層以外的內容就會自動裁剪掉.------陰影也會沒有,不能共存    self.imageView.layer.masksToBounds = YES;    NSLog(@"%@",self.imageView.layer.sublayers);    NSLog(@"%@",self.imageView.layer.contents); //imageView的圖片存放在layer的contents裡面.所以設定layer的圓角半徑不會影響到圖片}- (void)UIViewLayer{    //設定邊框(邊框寬度往裡走的)    self.yellowView.layer.borderColor = [UIColor redColor].CGColor;    self.yellowView.layer.borderWidth = 3;    //設定陰影    self.yellowView.layer.shadowColor = [UIColor blueColor].CGColor;    self.yellowView.layer.shadowOpacity = 1;    //陰影的不透明度,預設是0    self.yellowView.layer.shadowOffset = CGSizeMake(-10, 10);    self.yellowView.layer.shadowRadius = 50;    //越大越模糊    //設定圓角半徑    self.yellowView.layer.cornerRadius = 50;}

      不同點:
      注意:UIImageView當中Image並不是直接添加在層上面的.這是添加在layer當中的contents裡.
      我們設定層的所有屬性它只作用在層上面.對contents裡面的東西並不起作用.所以我們看不到圖片有圓角的效果.
      想要讓圖片有圓角的效果.可以把masksToBounds這個屬性設為YES,
      當設為YES,把就會把超過根層以外的東西都給裁剪掉.

CALayer的 CATransform3D屬性
旋轉,x,y,z 分別代表x,y,z軸.(如UIView的動畫都是繞著Z軸變化的)self.imageView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);平移self.imageView.layer.transform = CATransform3DScale(self.imageView.layer.transform, 0.5, 0.5, 0);縮放self.imageView.layer.transform = CATransform3DTranslate(self.imageView.layer.transform, 50, 50, 0);

可以通過KVC的方式進行設定屬性.

但是CATransform3DMakeRotation它的值,是一個結構體, 所以要把結構轉成對象.NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];[_imageView.layer setValue:value forKeyPath:@"transform.scale"];

後面forKeyPath屬性值不是亂寫的.蘋果文檔當中給了相關的屬性.


Snip20160309_2.pngCALayer的position和anchorPoint

position和anchorPoint是CAlayer的兩個屬性.
我們以前修改一個控制項的位置都是能過Frame的方式進行修改.
現在利用CALayer的position和anchorPoint屬性也能夠修改控制項的位置.

這兩個屬性是配合使用的.

  1. position:它是用來設定當前的layer在父控制項當中的位置的.
    所以它的座標原點.以父控制項的左上方為(0.0)點.
  2. anchorPoint:它是決點CALayer身上哪一個點會在position屬性所指的位置
    anchorPoint它是以當前的layer左上方為原點(0.0)
    它的取值範圍是0~1,它的預設在中間也就是(0.5,0.5)的位置.
    anchorPoint又稱錨點.就是把錨點定到position所指的位置.

兩者結合使用.想要修改某個控制項的位置,我們可以設定它的position點.
設定完畢後.layer身上的anchorPoint會自動定到position所在的位置

隱式動畫

瞭解什麼是隱式動畫前,要先瞭解是什麼根層和非根層.
1.根層:UIView內部自動關聯著的那個layer我們稱它是根層.
2.非根層:自己手動建立的層,稱為非根層.

隱式動畫就是當對非根層的部分屬性(bounds、backgroundColor、position等)進行修改時, 它會自動的產生一些動畫的效果.
我們稱這個預設產生的動畫為隱式動畫.

  • 如何取消隱式動畫?
    首先要瞭解動畫底層是怎麼做的.動畫的底層是封裝成一個事務來進行的.
    什麼是事務?
    很多操作綁定在一起,當這些操作執行完畢後,才去執行下一個操作.
    開啟事務[CATransaction begin];設定事務沒有動畫[CATransaction setDisableActions:NO];設定隱式動畫執行的時間長度[CATransaction setAnimationDuration:2];提交事務[CATransaction commit];
 


李小南
連結:http://www.jianshu.com/p/42b98ca384b7
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

iOS開發之CALayer介紹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.