天天看點

CGContextRef自繪控件

Quartz 2D繪圖的核心API是CGContextRef,該API并不是一個對象。由于Quartz 2D本身并不是面向對象的,它是面向過程的API,Quartz 2D提供了大量函數來完成繪圖。

繪制圖形要重寫drawRect方法,drawRect方法會在setNeedsDisplay方法掉用後,程式會自動調用進行重繪.drawRect方法一般情況下隻會被調用一次. 當某些情況下想要手動重畫這個View,隻需要調用[self setNeedsDisplay]方法即可

在UIView中,重寫drawRect: (CGRect) aRect方法,可以自己定義想要畫的圖案.

如果隻需要繪制一次,重寫自定義View即可,如果要多次進行繪制,需要調用setNeedsDisplay,并根據參數進行修改.`

注意:

如果在UIView初始化時沒有設定rect大小,會導緻drawRect不被調用.

該方法在調用sizeThatFits後被調用,是以可以先調用sizeToFit計算出size。然後系統自動調用drawRect:方法.

通過設定contentMode屬性值為UIViewContentModeRedraw。那麼将在每次設定或更改frame的時候自動調用drawRect:

直接調用setNeedsDisplay,或者setNeedsDisplayInRect:觸發drawRect:,但是有個前提條件是rect不能為0.