方法描寫敘述:建立乙個calayer的子類。然後覆蓋drawincontext:方法。使用quartz2d api進行畫圖
#pragma mark 繪製乙個實心三角形
4 - (void
)drawincontext:(cgcontextref)ctx
2122 @end
1 mjlayer *layer =[mjlayer layer];2//注意第7行,須要呼叫setneedsdisplay這種方法,才會觸發drawincontext:方法的呼叫,然後進行畫圖設定層的寬高
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];
回到頂部
方法描寫敘述:設定calayer的delegate,然後讓delegate實現drawlayer:incontext:方法,當calayer須要畫圖時。會呼叫delegate的drawlayer:incontext:方法進行畫圖。
* 這裡要注意的是:不能再將某個uiview設定為calayer的delegate,由於uiview物件已經是它內部根層的delegate,再次設定為其它層的delegate就會出問題。uiview和它內部calayer的預設關係圖:
設定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進行繪圖 2 3 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcontextref ctx 21 22 end 1 mjlayer layer ...