国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS UIView 和 CALayer 的關系

2019-11-09 16:33:48
字體:
來源:轉載
供稿:網友

一、概念: UIView不具備顯示功能,擁有顯示功能的是它內部的圖層即CALayer屬性

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

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

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

1.通過CALayer設置邊框的顏色、寬度、圓角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類型,可以接受內容,上面的實例讓layer顯示一張圖片,仔細觀察可以發現四個圓角的部分露了一個角出來。設置Image不是展示在主圖層上的,而是顯示子圖層上的。可以通過設置一個范圍,設置超出主圖層的部分把它切掉self.view.layer.masksToBounds = YES;或self.view.clipsToBounds = YES;3. 動畫的運作:對UIView的subLayer(非主Layer)屬性進行更改,系統將自動進行動畫生成,動畫持續時間的缺省值似乎是0.5秒。4. 坐標系統:CALayer的坐標系統比UIView多了一個anchorPoint屬性,使用CGPoint結構表示,值域是0~1,是個比例值。這個點是各種圖形變換的坐標原點,同時會更改layer的position的位置,它的缺省值是{0.5,0.5},即在layer的中央。 某layer.anchorPoint = CGPointMake(0.f,0.f); 5.渲染:當更新層,改變不能立即顯示在屏幕上。當所有的層都準備好時,可以調用setNeedsDisplay方法來重繪顯示。 [gameLayer setNeedsDisplay]; 若要重繪部分屏幕區域,請使用setNeedsDisplayInRect:方法,通過在CGRect結構的區域更新: [gameLayer setNeedsDisplayInRect:CGRectMake(150.0,100.0,50.0,75.0)]; 如果是用的CoreGraphics框架來執行渲染的話,可以直接渲染Core Graphics的內容。用renderInContext:來做這個事。 [gameLayer renderInContext:UIGraphicsGetCurrentContext()]; 6.變換:要在一個層中添加一個3D或仿射變換,可以分別設置層的transform或affineTransform屬性。 characterView.layer.transform =CATransform3DMakeScale(-1.0,-1.0,1.0); CGAffineTransform transform =CGAffineTransformMakeRotation(45.0); backgroundView.layer.affineTransform = transform; 7.變形:Quartz Core的渲染能力,使二維圖像可以被自由操縱,就好像是三維的。圖像可以在一個三維坐標系中以任意角度被旋轉,縮放和傾斜。CATransform3D的一套方法提供了一些魔術般的變換效果。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 准格尔旗| 许昌县| 红原县| 德惠市| 淄博市| 绥中县| 乌什县| 潞城市| 扶余县| 常德市| 龙州县| 安乡县| 安西县| 元谋县| 东乌珠穆沁旗| 连州市| 成都市| 电白县| 大洼县| 洛扎县| 肇东市| 华池县| 且末县| 宝丰县| 镇巴县| 葵青区| 丰原市| 汕尾市| 额敏县| 科技| 东乌| 广宁县| 武义县| 乌拉特后旗| 古浪县| 郸城县| 娄烦县| 青州市| 寿宁县| 仁布县| 增城市|