CALayer4 自定義層

2022-03-28 03:38:56 字數 2086 閱讀 4916

方法描述:建立乙個calayer的子類,然後覆蓋drawincontext:方法,使用quartz2d api進行繪圖

2 3 #pragma mark 繪製乙個實心三角形

4 - (void)drawincontext:(cgcontextref)ctx

21 22 @end

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:方法的呼叫,然後進行繪圖

回到頂部

方法描述:設定calayer的delegate,然後讓delegate實現drawlayer:incontext:方法,當calayer需要繪圖時,會呼叫delegate的drawlayer:incontext:方法進行繪圖。

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

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進行繪圖

1 #pragma mark 畫乙個矩形框

回到頂部

無論採取哪種方法來自定義層,都必須呼叫calayer的setneedsdisplay方法才能正常繪圖。

* 當uiview需要顯示時,它內部的層會準備好乙個cgcontextref(圖形上下文),然後呼叫delegate(這裡就是uiview)的drawlayer:incontext:方法,並且傳入已經準備好的cgcontextref物件。而uiview在drawlayer:incontext:方法中又會呼叫自己的drawrect:方法

* 平時在drawrect:中通過uigraphicsgetcurrentcontext()獲取的就是由層傳入的cgcontextref物件,在drawrect:中完成的所有繪圖都會填入層的cgcontextref中,然後被拷貝至螢幕

CALayer4 自定義層

本文目錄 自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。回到頂部 方法描述 建立乙個calayer的子類,然後覆蓋drawincontext 方法,使用quartz2d api進行繪圖 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcon...

CALayer4 自定義層

自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。回到頂部 方法描述 建立乙個calayer的子類,然後覆蓋drawincontext 方法,使用quartz2d api進行繪圖 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcontextr...

CALayer4 自己定義層

方法描寫敘述 建立乙個calayer的子類。然後覆蓋drawincontext 方法。使用quartz2d api進行畫圖 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcontextref ctx 2122 end 1 mjlayer layer mjl...