iOS UIView與CALayer

圖片發(fā)自簡書App


一、概念:

UIView不具備顯示功能,擁有顯示功能的是它內(nèi)部的圖層即CALayer屬性

當(dāng)UIView需要顯示到屏幕上時,會調(diào)用DrawRect:方法進行繪圖,并且將所有的內(nèi)容繪制在自己的圖層上Property()CALayer *layer,繪圖完成后,系統(tǒng)會將圖層拷貝到屏幕上,于是就完成了UIView的顯示

UIView 的Layer屬性在系統(tǒng)內(nèi)部,被維護著三份拷貝。分別是邏輯樹,這里是代碼可以操作的;動畫樹,是一個中間層,系統(tǒng)就在這一層上更改屬性,進行各種渲染操作;顯示樹,其內(nèi)容就是當(dāng)前正被顯示在屏幕上的內(nèi)容

UIView 本身更像是一個CALayer的管理器,UIView 有個屬性CALayer *layer ,所有從UIView繼承的對象都繼承了該屬性。因此,可以通過layer 屬性對view 進行 轉(zhuǎn)換、縮放、旋轉(zhuǎn)等操作

二、基本使用

1.通過CALayer設(shè)置邊框的顏色、寬度、圓角

self.view.layer.borderWidth = 20;

self.view.layer.borderColor = [UIColor greenColor].CGColor;

self.view.layer.cornerRadius = 20;

2.在layer 上添加一張圖片

self.view.layer.contents = (id)[UIImage imageNamed:@""].CGImage

//contents是id類型,可以接受內(nèi)容,上面的實例讓layer顯示一張圖片,仔細觀察可以發(fā)現(xiàn)四個圓角的部分露了一個角出來。

設(shè)置Image不是展示在主圖層上的,而是顯示子圖層上的。可以通過設(shè)置一個范圍,設(shè)置超出主圖層的部分把它切掉

self.view.layer.masksToBounds = YES;

或self.view.clipsToBounds = YES;

3. 動畫的運作:對UIView的subLayer(非主Layer)屬性進行更改,系統(tǒng)將自動進行動畫生成,動畫持續(xù)時間的缺省值似乎是0.5秒。

4. 坐標(biāo)系統(tǒng):CALayer的坐標(biāo)系統(tǒng)比UIView多了一個anchorPoint屬性,使用CGPoint結(jié)構(gòu)表示,值域是0~1,是個比例值。這個點是各種圖形變換的坐標(biāo)原點,同時會更改layer的position的位置,它的缺省值是{0.5,0.5},即在layer的中央。

某layer.anchorPoint = CGPointMake(0.f,0.f);

5.渲染:當(dāng)更新層,改變不能立即顯示在屏幕上。當(dāng)所有的層都準備好時,可以調(diào)用setNeedsDisplay方法來重繪顯示。 [gameLayer setNeedsDisplay];

? 若要重繪部分屏幕區(qū)域,請使用setNeedsDisplayInRect:方法,通過在CGRect結(jié)構(gòu)的區(qū)域更新: [gameLayer

? setNeedsDisplayInRect:CGRectMake(150.0,100.0,50.0,75.0)]; 如果是用的CoreGraphics框架來執(zhí)行渲染的話,可以直接渲染Core Graphics的內(nèi)容。用renderInContext:來做這個事。 [gameLayer renderInContext:UIGraphicsGetCurrentContext()];

? 6.變換:要在一個層中添加一個3D或仿射變換,可以分別設(shè)置層的transform或affineTransform屬性。 characterView.layer.transform =CATransform3DMakeScale(-1.0,-1.0,1.0);

? CGAffineTransform transform =CGAffineTransformMakeRotation(45.0);

? backgroundView.layer.affineTransform = transform;

? 7.變形:Quartz Core的渲染能力,使二維圖像可以被自由操縱,就好像是三維的。圖像可以在一個三維坐標(biāo)系中以任意角度被旋轉(zhuǎn),縮放和傾斜。CATransform3D的一套方法提供了一些魔術(shù)般的變換效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容