IOS CALayer(二),ioscalayer

來源:互聯網
上載者:User

IOS CALayer(二),ioscalayer

UIview內部有個預設的CALayer對象層,雖然我門不可以重新建立它,但是我門可以再其上面添加子層。

我們知道,UIView有 addSubview:方法,同樣,CALayer也有addSublayer:方法。我門可以通過addSublayer:再已有layer上添加自層。

下面我門示範如何添加自層。

 

////  ViewController.m//  CX - CALayer(二)////  Created by ma c on 16/3/19.//  Copyright © 2016年 xubaoaichiyu. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //初始化layer    CALayer * layer = [[CALayer alloc]init];    //設定layer的frame    layer.frame = CGRectMake(0, 20, self.view.frame.size.width, 200);    //設定layer的背景顏色    layer.backgroundColor = [UIColor orangeColor].CGColor;    //再self.view.layer上添加layer    [self.view.layer addSublayer:layer];        }@end

除了這種簡單的圖層,我門還可以設定圖片的圖層。(layer.contents = (id)[UIImage imageNamed:@"nvshen.jpg"].CGImage;)

////  ViewController.m//  CX - CALayer(二)////  Created by ma c on 16/3/19.//  Copyright © 2016年 xubaoaichiyu. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //初始化layer    CALayer * layer = [[CALayer alloc]init];    //設定layer的frame    layer.frame = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);    //添加圖片    layer.contents = (id)[UIImage imageNamed:@"nvshen.jpg"].CGImage;    //設定layer的背景顏色    layer.backgroundColor = [UIColor orangeColor].CGColor;    //再self.view.layer上添加layer    [self.view.layer addSublayer:layer];        }@end

下面引用MJ神的講解:

為什麼CALayer中使用CGColorRef和CGImageRef這2種資料類型,而不用UIColor和UIImage?

* 首先要知道:CALayer是定義在QuartzCore架構中的;CGImageRef、CGColorRef兩種資料類型是定義在CoreGraphics架構中的;UIColor、UIImage是定義在UIKit架構中的

* 其次,QuartzCore架構和CoreGraphics架構是可以跨平台使用的,在iOS和Mac OS X上都能使用,但是UIKit只能在iOS中使用

* 因此,為了保證可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

* 不過很多情況下,可以通過UIKit對象的特定方法,得到CoreGraphics對象,比如UIImage的CGImage方法可以返回一個CGImageRef

UIView和CALayer的選擇

* 其實,對比CALayer,UIView多了一個事件處理的功能。也就是說,CALayer不能處理使用者的觸摸事件,而UIView可以

* 所以,如果顯示出來的東西需要跟使用者進行互動的話,用UIView;如果不需要跟使用者進行互動,用UIView或者CALayer都可以

* 當然,CALayer的效能會高一些,因為它少了事件處理的功能,更加輕量級

UIView和CALayer的其他關係

* UIView可以通過subviews屬性訪問所有的子視圖,類似地,CALayer也可以通過sublayers屬性訪問所有的子層

* UIView可以通過superview屬性訪問父視圖,類似地,CALayer也可以通過superlayer屬性訪問父層

* 下面再看一張UIView和CALayer的關係圖:

如果兩個UIView是父子關係,那麼它們內部的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.