1,畫圖中的兩個方法的區別:c#
drawAtPoint:該方法以圖片的實際大小來顯示oop
drawInRect:該方法會將圖片拉伸填充指定的整個rectspa
drawAsPatternInRect:該方法會將圖片以實際大小平鋪到指定的rect中圖片
2,drawRect:方法調用的時間是當View調用viewWillAppear的時候系統調用,在該方法中,調用的時候能夠在該方法中拿到layer的圖層上下文。、內存
注意:drawRect方法是系統調用的,view不能調用,view能夠經過調用setNeedDisplay來間接調用drawRect方法。get
: 程序啓動,顯示自定義的view。當程序第一次顯示在咱們眼前的時候,程序會調用drawRect:方法,在裏面獲取了圖形上下文(在內存中擁有了),而後利用圖形上下文保存繪圖信息,能夠理解爲圖形上下文中有一塊區域用來保存繪圖信息,有一塊區域用來保存繪圖的狀態(線寬,圓角,顏色)。直線不是直接繪製到view上的,能夠理解爲在圖形上下文中有一塊單獨的區域用來先繪製圖形,當調用渲染方法的時候,再把繪製好的圖形顯示到view上去。it
3,圖形上下文棧渲染
CGContextSaveGState(ctx);date
方法,把當前獲取的上下文拷貝一份,保存一份最純潔的圖形上下文。5 補充說明select
1.drawRect:
(1)爲何要實現drawRect:⽅法才能繪圖到view上?
由於在drawRect:⽅法中才能取得跟view相關聯的圖形上下文
(2)drawRect:⽅法在何時被調用?
當view第一次顯示到屏幕上時(被加到UIWindow上顯示出來)
調用view的setNeedsDisplay或者setNeedsDisplayInRect:時
第一個:
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];
說明: NSTimer通常用於定時的更新一些非界面上的數據,告訴多久調用一次
第二個:
CADisplayLink *display= [CADisplayLink displayLinkWithTarget:self selector:@selector(updateImage)];
[display addToRunLoop:[NSRunLoopmainRunLoop] forMode:NSDefaultRunLoopMode];
說明: CADisplayLink刷幀,默認每秒刷新60次。該定時器建立以後,默認是不會執行的,須要把它加載到消息循環中
圖形上下文的做用:
(1)保存繪圖信息、繪圖狀態
(2)決定繪製的輸出目標(繪製到什麼地⽅去?) (輸出目標能夠是PDF⽂文件、Bitmap或者顯示器的窗口上)
相同的⼀套繪圖序列,指定不一樣的Graphics Context,就可將相同的圖像繪製到不一樣的目標上