iOS核心動畫之CALayer-自訂層

來源:互聯網
上載者:User
本文目錄 一、自訂層的方法1 二、自訂層的方法2  三、其他

自訂層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。 回到頂部 一、自訂層的方法1

方法描述:建立一個CALayer的子類,然後覆蓋drawInContext:方法,使用Quartz2D API進行繪圖 1.建立一個CALayer的子類

  2.在.m檔案中覆蓋drawInContext:方法,在裡面繪圖

 1 @implementation MJLayer 2  3 #pragma mark 繪製一個實心三角形 4 - (void)drawInContext:(CGContextRef)ctx { 5     // 設定為藍色 6     CGContextSetRGBFillColor(ctx, 0, 0, 1, 1); 7  8      9     // 設定起點10     CGContextMoveToPoint(ctx, 50, 0);11     // 從(50, 0)連線到(0, 100)12     CGContextAddLineToPoint(ctx, 0, 100);13     // 從(0, 100)連線到(100, 100)14     CGContextAddLineToPoint(ctx, 100, 100);15     // 合并路徑,串連起點和終點16     CGContextClosePath(ctx);17     18     // 繪製路徑19     CGContextFillPath(ctx);20 }21 22 @end

  3.在控制器中添加圖層到螢幕上

1 MJLayer *layer = [MJLayer layer];2 // 設定層的寬高3 layer.bounds = CGRectMake(0, 0, 100, 100);4 // 設定層的位置5 layer.position = CGPointMake(100, 100);6 // 開始繪製圖層7 [layer setNeedsDisplay];8 [self.view.layer addSublayer:layer];

注意第7行,需要調用setNeedsDisplay這個方法,才會觸發drawInContext:方法的調用,然後進行繪圖

  回到頂部 二、自訂層的方法2

方法描述:設定CALayer的delegate,然後讓delegate實現drawLayer:inContext:方法,當CALayer需要繪圖時,會調用delegate的drawLayer:inContext:方法進行繪圖。

* 這裡要注意的是:不能再將某個UIView設定為CALayer的delegate,因為UIView對象已經是它內部根層的delegate,再次設定為其他層的delegate就會出問題。UIView和它內部CALayer的預設關係圖:

1.建立新的層,設定delegate,然後添加到控制器的view的layer中

 1 CALayer *layer = [CALayer layer]; 2 // 設定delegate 3 layer.delegate = self; 4 // 設定層的寬高 5 layer.bounds = CGRectMake(0, 0, 100, 100); 6 // 設定層的位置 7 layer.position = CGPointMake(100, 100); 8 // 開始繪製圖層 9 [layer setNeedsDisplay];10 [self.view.layer addSublayer:layer];

* 在第3行設定了CALayer的delegate,這裡的self是指控制器

* 注意第9行,需要調用setNeedsDisplay這個方法,才會通知delegate進行繪圖

  2.讓CALayer的delegate(前面設定的是控制器)實現drawLayer:inContext:方法

 1 #pragma mark 畫一個矩形框 2 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 3     // 設定藍色 4     CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1); 5     // 設定邊框寬度 6     CGContextSetLineWidth(ctx, 10); 7      8     // 添加一個跟層一樣大的矩形到路徑中 9     CGContextAddRect(ctx, layer.bounds);10     11     
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.