第一部分 quartz2D繪圖基礎簡介:CGContextRef函數
一 quartz2D常常用來繪圖,它的核心API是CGContextRefspa
二 CGContextRef的獲取3d
1. 建立位圖時獲取咱們所需CGContextRef(常稱爲繪圖上下文)orm
在建立位圖時,須要獲取CGContextRef,那麼程序須要先調用UIGraphicsBeginImageContext()來建立內存中的圖片,而後利用該函數獲取CGContextRef。具體操做以下:圖片
UIGraphicsBeginImageContext(CGSizeMake(375,568));內存
CGContextRef ctx=UIGraphicsGetCurrentContext();it
2.UIVIew獲取當前上下文的方式io
重寫UIView的drawRect的方法,每當裏面的內容有更新時,或者顯示時,都會調用這個方法。在調用這個方法以前,系統會自動配置繪圖環境,所以,只須要經過下面的方法獲取便可import
CGContextRef ctx=UIGraphicsGetCurrentContext();基礎
第二部分 繪圖相關的函數簡介
/**
*繪圖上下文的獲取
*/
CGContextRef ctx=UIGraphicsGetCurrentContext();
/**
*設置繪製直線時直線的寬度
*/
CGContextSetLineWidth(ctx, 2);
/**
*使用指定的顏色來設置 CGContextRef 的線條的顏色
*/
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
/**
*使用指定的顏色來設置 CGContextRef 的填充顏色
*/
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
/**
*使用灰色來設置CGContextRef 的填充顏色,而且能夠設置透明度
*/
CGContextSetGrayFillColor(<#CGContextRef context#>, <#CGFloat gray#>, <#CGFloat alpha#>);
/**
*使用灰色來設置CGContextRef 的線條顏色,而且能夠設置透明度
*/
CGContextSetGrayStrokeColor(<#CGContextRef context#>, <#CGFloat gray#>, <#CGFloat alpha#>);
/**
*使用RGB顏色模式來設置CGContextRef 的填充顏色
*/
CGContextSetRGBFillColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>);
/**
*使用RGB顏色模式來設置CGContextRef 的線條顏色
*/
CGContextSetRGBStrokeColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>);
/**
*設置陰影在X,Y方向上的偏移,以及模糊度(blur值越大,陰影越模糊),該函數沒有設置陰影顏色,默認使用1/3透明黑色
*/
CGContextSetShadow(<#CGContextRef context#>, <#CGSize offset#>, <#CGFloat blur#>)
/**
*設置陰影在X,Y方向上的偏移,模糊度,和陰影的顏色
*/
CGContextSetShadowWithColor(<#CGContextRef context#>, <#CGSize offset#>, <#CGFloat blur#>, <#CGColorRef color#>)
第三部分 代碼部分
#import "MyView.h"
@implementation MyView
- (void)drawRect:(CGRect)rect {
[self drawLine];
[self drawRect];
[self drawArc];
[self drawQLine];
}
/**
*繪製一條直線
*/
-(void)drawLine{
//1---獲取繪圖上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//2---使用指定顏色來設置該上下文的線條顏色
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
//3---設置直線寬度
CGContextSetLineWidth(ctx, 3);
//4---設置線條的起點
CGContextMoveToPoint(ctx, 20, 20);
//5---設置終點
CGContextAddLineToPoint(ctx, 220, 20);
//6---開始繪圖
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*繪製一個矩形
*/
-(void)drawRect{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor greenColor].CGColor);
CGContextSetLineWidth(ctx, 3);
CGContextAddRect(ctx, CGRectMake(200, 50, 100, 100));
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*繪製一個圓形
*/
-(void)drawArc
{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor orangeColor].CGColor);
CGContextSetLineWidth(ctx, 2);
CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextAddArc(ctx, 100, 100, 50, 0, 2*M_PI, 0);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*繪製一條曲線
*/
-(void)drawQLine{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor orangeColor].CGColor);
CGContextSetLineWidth(ctx, 3);
CGContextMoveToPoint(ctx, 50, 280);
CGContextAddCurveToPoint(ctx, 100, 100, 150, 150, 200, 180);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
運行結果: