0 CGContextRef context = UIGraphicsGetCurrentContext(); 設(shè)置上下文
1 CGContextMoveToPoint 開始畫線
2 CGContextAddLineToPoint 畫直線
4 CGContextAddEllipseInRect 畫一橢圓
4 CGContextSetLineCap 設(shè)置線條終點(diǎn)形狀
4 CGContextSetLineDash 畫虛線
4 CGContextAddRect 畫一方框
4 CGContextStrokeRect 指定矩形
4 CGContextStrokeRectWithWidth 指定矩形線寬度
4 CGContextStrokeLineSegments 一些直線
5 CGContextAddArc 畫一曲線 前2點(diǎn)為中心 中間倆店為起始弧度 最后一數(shù)據(jù)為0則順時(shí)針畫1則逆時(shí)針
5 CGContextAddArcToPoint(context,0,0, 2, 9, 40);先畫倆條線從point 到第1點(diǎn) 從第1點(diǎn)到第2點(diǎn)的線 切割里面的圓
6 CGContextSetShadowWithColor 設(shè)置陰影
顏色
7 CGContextSetRGBFillColor 設(shè)置填充顏色
7 CGContextSetRGBStrokeColor 設(shè)置畫筆/邊框顏色
7 CGContextSetFillColorSpace 顏色空間填充
7 CGConextSetStrokeColorSpace 顏色空間畫筆設(shè)置
8 CGContextFillRect 補(bǔ)充當(dāng)前填充顏色的rect
8 CGContextSetAlaha 透明度
9 CGContextTranslateCTM 改變畫布位置
10 CGContextSetLineWidth 設(shè)置線的寬度
11 CGContextAddRects 畫多個(gè)線
12 CGContextAddQuadCurveToPoint 畫曲線
13 CGContextStrokePath 開始繪制圖片
13 CGContextDrawPath 設(shè)置繪制模式
14 CGContextClosePath 封閉當(dāng)前線路
15 CGContextTranslateCTM(context, 0, rect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);反轉(zhuǎn)畫布
16 CGContextSetInterpolationQuality 背景內(nèi)置顏色質(zhì)量等級(jí)
16 CGImageCreateWithImageInRect 從原圖片中取小圖
17 字符串的寫入可用 NSString本身的畫圖方法
- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:
(UILineBreakMode)lineBreakMode alignment:(UITextAlignment)alignment;
18對(duì)圖片放大縮小的功能就是慢了點(diǎn)
UIGraphicsBeginImageContext(newSize);
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
19 CGColorGetComponents() 返回顏色的各個(gè)直 以及透明度 可用只讀const float 來(lái)接收 是個(gè)數(shù)組
20 畫圖片
CGImageRef image=CGImageRetain(img.CGImage);
CGContextDrawImage(context, CGRectMake(10.0, height - 100.0, 90.0, 90.0), image);
21 實(shí)現(xiàn)逐變顏色填充方法
CGContextClip(context);
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat colors[] =
{
204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00,
29.0 / 255.0, 156.0 / 255.0, 215.0 / 255.0, 1.00,
0.0 / 255.0, 50.0 / 255.0, 126.0 / 255.0, 1.00,
};
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));
CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(context, gradient,CGPointMake(0.0,0.0) ,CGPointMake(0.0,self.frame.size.height),kCGGradientDrawsBeforeStartLocation);
22 注: 畫完圖后,必須先用CGContextStrokePath來(lái)描線,即形狀后用CGContextFillPath來(lái)填充形狀內(nèi)的顏色.
填充一個(gè)路徑的時(shí)候馍刮,路徑里面的子路徑都是獨(dú)立填充的。
假如是重疊的路徑绷落,決定一個(gè)點(diǎn)是否被填充,有兩種規(guī)則
1,nonzero winding number rule:非零繞數(shù)規(guī)則铛绰,假如一個(gè)點(diǎn)被從左到右跨過(guò)幻梯,計(jì)數(shù)器+1,從右到左跨過(guò)梧油,計(jì)數(shù)器-1,最后州邢,如果結(jié)果是0儡陨,那么不填充,如果是非零,那么填充骗村。
2,even-odd rule: 奇偶規(guī)則嫌褪,假如一個(gè)點(diǎn)被跨過(guò),那么+1胚股,最后是奇數(shù)笼痛,那么要被填充,偶數(shù)則不填充琅拌,和方向沒(méi)有關(guān)系缨伊。
CGContextEOFillPath 使用奇偶規(guī)則填充當(dāng)前路徑
CGContextFillPath 使用非零繞數(shù)規(guī)則填充當(dāng)前路徑
CGContextFillRect 填充指定的矩形
CGContextFillRects 填充指定的一些矩形
CGContextFillEllipseInRect 填充指定矩形中的橢圓
CGContextDrawPath
兩個(gè)參數(shù)決定填充規(guī)則,
kCGPathFill表示用非零繞數(shù)規(guī)則财忽,
kCGPathEOFill表示用奇偶規(guī)則倘核,
kCGPathFillStroke表示填充,
kCGPathEOFillStroke表示描線即彪,不是填充
當(dāng)一個(gè)顏色覆蓋上另外一個(gè)顏色,兩個(gè)顏色怎么混合
默認(rèn)方式是
result = (alpha * foreground) + (1 - alpha) * background
CGContextSetBlendMode :設(shè)置blend mode.
CGContextSaveGState :保存blend mode.
CGContextRestoreGState:在沒(méi)有保存之前活尊,用這個(gè)函數(shù)還原blend mode.
CGContextSetBlendMode 混合倆種顏色
======================================================================
======================================================================
虛線
畫虛線需要用到函數(shù):
CG_EXTERN void CGContextSetLineDash(CGContextRef __nullable c, CGFloat phase,
const CGFloat * __nullable lengths, size_t count)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
此函數(shù)需要四個(gè)參數(shù):
context – 這個(gè)不用多說(shuō)
phase - 稍后再說(shuō)
lengths – 指明虛線是如何交替繪制隶校,具體看例子
count – lengths數(shù)組的長(zhǎng)度
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColorwhiteColor].CGColor);
float lengths[] = {10,10};
CGContextSetLineDash(context, 0, lengths,2);
CGContextMoveToPoint(context, 10.0, 20.0);
CGContextAddLineToPoint(context, 310.0,20.0);
CGContextStrokePath(context);
CGContextClosePath(context);
-
lengths的值{10,10}表示先繪制10個(gè)點(diǎn),再跳過(guò)10個(gè)點(diǎn)蛹锰,如此反復(fù)深胳,如圖:
-
如果把lengths值改為{10, 20, 10},則表示先繪制10個(gè)點(diǎn)铜犬,跳過(guò)20個(gè)點(diǎn)舞终,繪制10個(gè)點(diǎn),跳過(guò)10個(gè)點(diǎn)癣猾,再繪制20個(gè)點(diǎn)敛劝,如此反復(fù),如圖:
注意count的值等于lengths數(shù)組的長(zhǎng)度
phase參數(shù)表示在第一個(gè)虛線繪制的時(shí)候跳過(guò)多少個(gè)點(diǎn)纷宇,舉例說(shuō)明:
float lengths[] = {10,5};
CGContextSetLineDash(context, 0, lengths, 2);
CGContextMoveToPoint(context, 0.0, 20.0);
CGContextAddLineToPoint(context, 310.0, 20.0);
CGContextStrokePath(context);
========
CGContextSetLineDash(context, 5, lengths, 2);
CGContextMoveToPoint(context, 0.0, 40.0);
CGContextAddLineToPoint(context, 310.0, 40.0);
CGContextStrokePath(context);
========
CGContextSetLineDash(context, 8, lengths, 2);
CGContextMoveToPoint(context, 0.0, 60.0);
CGContextAddLineToPoint(context, 310.0, 60.);
CGContextStrokePath(context);
如圖顯示:由于lengths值為{10夸盟,5},第一條線就是繪制10像捶,跳過(guò)5上陕,反復(fù)繪制。
第二條線的phase值為5拓春,則首先繪制【10減去5】释簿,再跳過(guò)5,繪制10硼莽,反復(fù)繪制庶溶。
第三條給也如此,先繪制2,再跳過(guò)5渐尿,如此反復(fù)醉途。
================================================================
切線
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 100, 100);//起始點(diǎn)
CGContextAddArcToPoint(context, 100,200, 300,200, 100);//點(diǎn)1,點(diǎn)2砖茸,半徑
CGContextStrokePath(context);
}
================================================================
橢圓
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGRect rectangle = CGRectMake(60,170,200,80);
CGContextAddEllipseInRect(context, rectangle);
CGContextStrokePath(context);
}
================================================================
曲線
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 10, 10);//起始點(diǎn)
CGContextAddCurveToPoint(context, 0, 50, 300, 250, 300, 400);//控制點(diǎn)1隘擎,控制點(diǎn)2,終點(diǎn)
CGContextStrokePath(context);
}
================================================================
曲線
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 10, 200);
CGContextAddQuadCurveToPoint(context, 150, 10, 300, 200);//控制點(diǎn)1凉夯,終點(diǎn)
CGContextStrokePath(context);
}
================================================================
虛線曲線
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 5.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGFloat dashArray[] = {2,6,4,2};
CGContextSetLineDash(context, 3, dashArray, 4);
CGContextMoveToPoint(context, 10, 200);
CGContextAddQuadCurveToPoint(context, 150, 10, 300, 200);//控制點(diǎn)1货葬,終點(diǎn)
CGContextStrokePath(context);
}
================================================================
以上引用
更多詳情
更多詳情