Quartz 2D在UIKit中也有很好的封裝和集成,我們日常開發時所用到的UIKit中的組件都是由Core Graphics進行繪製的。不僅如此,當我們引入UIKit框架時系統會自動引入Core Graphics框架,並且爲了方便開發者使用在UIKit內部還對一些常用的繪圖API進行了封裝。
2.獲得上下文的環境,創建一個畫布
Graphics Context是圖形上下文,可以將其理解爲一塊畫布,我們可以在上面進行繪畫操作,繪製完成後,如果要在view上繪圖,則將畫布放到我們的view中顯示即可,view看作是一個畫框.
CGContextRef context=UIGraphicsGetCurrentContext();
3.創建並設置路徑
4.將路徑添加到上下文
5.設置上下文狀態
6.繪製路徑
CGContextAddEllipseInRect(context, CGRectMake(x, y, width, height)); //繪製橢圓形
CGContextAddArc(context, 250, 40, 40, 0, 2*PI, 0); //繪製一個圓
CGContextSetLineWidth(context, 2.0);//設置線的寬度
CGContextSetFillColorWithColor(context,color); //填充顏色
CGContextSetStrokeColorWithColor(context,color)//線框顏色
//繪製文字
[Nsstring drawInrect:(CGRect)withattributs:(NSDictionary *)]
//繪製圖片
[UIimage drawInrect:(CGRect)] //如果尺寸不合適,會拉伸
[ UIimage drawAsPatternInRect:CGRectMake(x, y, width,height)];//平鋪
CGContextSetLineWidth、CGContextSetLineDash
線條顏色和線條模式
CGContextSetRGBStrokeColor、CGContextSetGrayStrokeColor、CGContextSetStrokeColorWithColor、CGContextSetStrokePattern
填充顏色和模式
CGContextSetRGBFillColor,CGContextSetGrayFillColor,CGContextSetFillColorWithColor, CGContextSetFillPattern
陰影
CGContextSetShadow、CGContextSetShadowWithColor
整體透明度
CGContextSetAlpha(個別顏色也具有alpha成分)
文本屬性
CGContextSelectFont、CGContextSetFont、CGContextSetFontSize、CGContextSetTextDrawingMode、CGContextSetCharacterSpacing
是否開啓反鋸齒和字體平滑
CGContextSetShouldAntialias、CGContextSetShouldSmoothFonts
-(void)drawRect:(CGRect)Rect;
{
//取得上下文
CGContextRef context=UIGraphicsGetCurrentContext();
//路徑添加到上下文
CGContextAddRect(context,CGRectMake(140, 120, 60, 30));
//設置上下文狀態:
CGContextSetLineWidth(context, 1.0);
aColor = [UIColor blueColor];
CGContextSetStrokeColorWithColor(context, aColor.CGColor);//線框顏色
//繪畫路徑
CGContextDrawPath(context, kCGPathFillStroke);
}
1.[self setNeedsDisplay] //更新整個視圖
2.[self setNeedsDisplayInRect:CGRect] //更新視圖的部分區域。
注意:不能直接調用 drawRect方法去刷新視圖,否則會刷新無效
圖形上下文變換的作用:平移,縮放,旋轉
平移:CGContextTranslateCTM(context,CGFloat x, CGFloat y);
縮放:CGContextScaleCTM(context,CGFloat sx, CGFloat sy);
旋轉:CGContextRoateCTM(context,CGFloat x);
CGContextSaveGState與CGContextRestoreGState的作用
使用Quartz時涉及到一個圖形上下文,其中圖形上下文中包含一個保存過的圖形狀態堆棧。在Quartz創建圖形上下文時,該堆棧是空的。CGContextSaveGState函數的作用是將當前圖形狀態推入堆棧。之後,您對圖形狀態所做的修改會影響隨後的描畫操作,但不影響存儲在堆棧中的拷貝。在修改完成後,您可以通過CGContextRestoreGState函數把堆棧頂部的狀態彈出,返回到之前的圖形狀態
使用自定義的drawing code一般用在你想要動態的顯示內容變化的時候。一般用在遊戲或者一些繪圖應用中,或者現有的控件ui的樣式不滿足需求。
2.iOS繪圖系統自身也是非常高效,它不會頻繁調用drawRect:方法,除非迫不得已(或調用了setNeedsDisplay方法)
3.一旦一個視圖已由自己繪製完成,那麼繪製的結果會被緩存下來留待重用,而不是每次重頭再來。(蘋果公司將緩存繪圖稱爲視圖的位圖存儲回填(bitmap backing store))
將代碼移到drawRect:方法中是提高性能的普遍做法。這是因爲繪圖引擎直接對屏幕進行渲染相對於先是脫屏渲染然後再將像素拷貝到屏幕要來的高效