1、Quartz2D簡介app
1. 什麼是Quartz2D框架
繪製圖形 : 線條\三角形\矩形\圓\弧等函數
繪製文字網站
繪製\生成圖片(圖像)spa
讀取\生成PDF對象
截圖\裁剪圖片繼承
自定義UI控件遊戲
… …圖片
2. Quartz2D實例ip
(1)裁剪圖片
(2)塗鴉\畫板
(3)手勢解鎖
(4)報表:折線圖\餅狀圖\柱狀圖
3. Quartz2D在iOS開發中的價值
UILabel:顯示文字
UIImageView:顯示圖片
UIButton:同時顯示圖片和文字(能點擊)
… …
保存繪圖信息、繪圖狀態
決定繪製的輸出目標(繪製到什麼地方去?)
(輸出目標能夠是PDF文件、Bitmap或者顯示器的窗口上)
Bitmap Graphics ContextPDF Graphics ContextWindow Graphics ContextLayer Graphics ContextPrinter Graphics Context
2. 自定義view
(1)首先,得有圖形上下文,由於它能保存繪圖信息,而且決定着繪製到什麼地方去
(2)其次,那個圖形上下文必須跟view相關聯,才能將內容繪製到view上面
(1)新建一個類,繼承自UIView
(2)實現- (void)drawRect:(CGRect)rect方法,而後在這個方法中
* 取得跟當前view相關聯的圖形上下文
* 繪製相應的圖形內容
* 利用圖形上下文將繪製的全部內容渲染顯示到view上面
3. drawRect:
由於在drawRect:方法中才能取得跟view相關聯的圖形上下文
當view第一次顯示到屏幕上時(被加到UIWindow上顯示出來)
調用view的setNeedsDisplay或者setNeedsDisplayInRect:時
CGContextRefCGPathRefCGContextStrokePath(ctx);……
(1)得到圖形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
(2)拼接路徑(下面代碼是搞一條線段)
CGContextMoveToPoint(ctx, 10, 10);CGContextAddLineToPoint(ctx, 100, 100);
(3)繪製路徑
CGContextStrokePath(ctx); // CGContextFillPath(ctx);
3. 經常使用拼接路徑函數
void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)
void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)
void CGContextAddRect(CGContextRef c, CGRect rect)
void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)
void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)
4. 經常使用繪製路徑函數
void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode)
void CGContextStrokePath(CGContextRef c)
void CGContextFillPath(CGContextRef c)
void CGContextSaveGState(CGContextRef c)
void CGContextRestoreGState(CGContextRef c)
6. 矩陣操做
利用矩陣操做,能讓繪製到上下文中的全部路徑一塊兒發生變化
void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)
void CGContextRotateCTM(CGContextRef c, CGFloat angle)
void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty)
7. Quartz2D的內存管理
告訴你這個圖片從哪來的
主要是一些網站爲了版權問題、廣告而添加的
好比,用戶拍完照片後,能夠在照片上打個水印,標識這個圖片是屬於哪一個用戶的
(1)開啓一個基於位圖的圖形上下文
void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
(2)從上下文中取得圖片(UIImage)
UIImage* UIGraphicsGetImageFromCurrentImageContext();
(3)結束基於位圖的圖形上下文
void UIGraphicsEndImageContext();
2. 圖片裁剪
void CGContextClip(CGContextRef c)
將當前上下所繪製的路徑裁剪出來(超出這個裁剪區域的都不能顯示)
3. 屏幕截圖
- (void)renderInContext:(CGContextRef)ctx;
調用某個view的layer的renderInContext:方法便可