CGContext含義

weixin_34162629發表於2017-07-24
程式碼含義
CGContextRef context = UIGraphicsGetCurrentContext(); 設定上下文
CGContextMoveToPoint 開始畫線
CGContextAddLineToPoint 畫直線
CGContextAddEllipseInRect 畫一橢圓
CGContextSetLineCap 設定線條終點形狀
CGContextSetLineDash 畫虛線
CGContextAddRect 畫一方框
CGContextStrokeRect 指定矩形
CGContextStrokeRectWithWidth 指定矩形線寬度
CGContextStrokeLineSegments 一些直線
CGContextAddArc 畫已曲線 前倆店為中心 中間倆店為起始弧度 最後一資料為0則順時針畫 1則逆時針
CGContextAddArcToPoint(context,0,0, 2, 9, 40); 先畫倆條線從point 到 第1點 , 從第1點到第2點的線 切割裡面的圓
CGContextSetShadowWithColor 設定陰影
CGContextSetRGBFillColor 這隻填充顏色
CGContextSetRGBStrokeColor 畫筆顏色設定
CGContextSetFillColorSpace 顏色空間填充
CGConextSetStrokeColorSpace 顏色空間畫筆設定
CGContextFillRect 補充當前填充顏色的rect
CGContextSetAlaha 透明度
CGContextTranslateCTM 改變畫布位置
CGContextSetLineWidth 設定線的寬度
CGContextAddRects 畫多個線
CGContextAddQuadCurveToPoint 畫曲線
CGContextStrokePath 開始繪製圖片
CGContextDrawPath 設定繪製模式
CGContextClosePath 封閉當前線路
CGContextTranslateCTM(context, 0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0); 反轉畫布
CGContextSetInterpolationQuality 背景內建顏色質量等級
CGImageCreateWithImageInRect 從原圖片中取小圖
CGColorGetComponents() 返回顏色的各個直 以及透明度 可用只讀const float 來接收 是個陣列
CGContextEOFillPath 使用奇偶規則填充當前路徑
CGContextFillPath 使用非零繞數規則填充當前路徑
CGContextFillRect 填充指定的矩形
CGContextFillRects 填充指定的一些矩形
CGContextFillEllipseInRect 填充指定矩形中的橢圓
CGContextDrawPath 兩個引數決定填充規則,
kCGPathFill 表示用非零繞數規則,
kCGPathEOFill 表示用奇偶規則,
kCGPathFillStroke 表示填充
kCGPathEOFillStroke 表示描線,不是填充
CGContextSetBlendMode 設定blend mode.
CGContextSaveGState 儲存blend mode.
CGContextRestoreGState 在沒有儲存之前,用這個函式還原blend mode.
CGContextSetBlendMode 混合倆種顏色

1、字串的 寫入可用 nsstring本身的畫圖方法

 -(CGSize)drawInRect:(CGRect)rect 
            withFont:(UIFont *)font 
       lineBreakMode:(UILineBreakMode)lineBreakMode 
           alignment:(UITextAlignment)alignment;來寫進去即可

2、對圖片放大縮小的功能就是慢了點

 UIGraphicsBeginImageContext(newSize);
 UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

3、畫圖片

 CGImageRef image=CGImageRetain(img.CGImage);
 CGContextDrawImage(context, CGRectMake(10.0, height - 100.0, 90.0, 90.0), image);

4、實現逐變顏色填充方法 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);

注: 畫完圖後,必須
先用CGContextStrokePath來描線,即形狀
後用CGContextFillPath來填充形狀內的顏色.

5、填充一個路徑的時候,路徑裡面的子路徑都是獨立填充的。
假如是重疊的路徑,決定一個點是否被填充,有兩種規則

 1,nonzero winding number rule:非零繞數規則,假如一個點被從左到右跨過,計數器+1,從右到左跨過,計數器-1,最後,如果結果是0,那麼不填充,如果是非零,那麼填充。
 2,even-odd rule: 奇偶規則,假如一個點被跨過,那麼+1,最後是奇數,那麼要被填充,偶數則不填充,和方向沒有關係。

6、設定當一個顏色覆蓋上另外一個顏色,兩個顏色怎麼混合
預設方式是

 result = (alpha * foreground) + (1 - alpha) * background


作者:JanzTam
連結:http://www.jianshu.com/p/1d0e405f166e
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章