iOS CGContextRef画图小结

 CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文

    //画一条线
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);//线条颜色
    CGContextSetLineWidth(context, 5.0);//线条宽度
    CGContextMoveToPoint(context, 20, 20); //开始画线, x,y 为开始点的坐标
    CGContextAddLineToPoint(context, 300, 20);//画直线, x,y 为线条结束点的坐标
    CGContextStrokePath(context); //开始画线

    //绘制贝兹曲线
    //贝兹曲线是通过移动一个起始点,然后通过两个控制点,还有一个中止点,调用CGContextAddCurveToPoint() 函数绘制
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextMoveToPoint(context, 10, 10);
    CGContextAddCurveToPoint(context, 200, 50, 100, 400, 300, 400);
    CGContextStrokePath(context);

    //绘制连续的曲线
    CGContextSetLineWidth(context, 5.0);
    CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
    CGContextMoveToPoint(context, 230, 150);//开始画线, x,y 为开始点的坐标
    CGContextAddCurveToPoint(context, 310, 100, 300, 200, 220, 220);//画三次点曲线
    CGContextAddCurveToPoint(context, 290, 140, 280, 180, 240, 190);//画三次点曲线

    CGContextStrokePath(context);//开始画线

    //绘制虚线
    CGContextSetRGBStrokeColor(context, 0.1, 0.2, 0.3, 1);//线条颜色
    float dashArray1[] = {3, 2};
    CGContextSetLineDash(context, 0, dashArray1, 2);//画虚线,可参考http://blog.csdn.net/zhangao0086/article/details/7234859
    CGContextMoveToPoint(context, 5, 70);//开始画线, x,y 为开始点的坐标
    CGContextAddLineToPoint(context, 310, 70);//画直线, x,y 为线条结束点的坐标
    CGContextStrokePath(context);//开始画线

    //绘制虚曲线
    CGContextSetRGBStrokeColor(context, 0.3, 0.2, 0.1, 1);//线条颜色
    float dashArray2[] = {3, 2, 10};
    CGContextSetLineDash(context, 0, dashArray2, 3);//画虚线
    CGContextMoveToPoint(context, 5, 90);//开始画线, x,y 为开始点的坐标
    CGContextAddCurveToPoint(context, 200, 50, 100, 400, 300, 400);
    CGContextStrokePath(context);//开始画线

    //绘制连续的曲线
    CGContextSetLineWidth(context, 5.0);
    float dashArray3[] = {3, 2, 10, 20, 5};
    CGContextSetLineDash(context, 0, dashArray3, 5);//画虚线
    CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
    CGContextMoveToPoint(context, 5, 400);//开始画线, x,y 为开始点的坐标
    CGContextAddCurveToPoint(context, 50, 200, 80, 300, 100, 220);//画三次点曲线
    CGContextAddQuadCurveToPoint(context, 150, 100, 200, 200);//画二次点曲线
    CGContextAddCurveToPoint(context, 240, 400, 10, 50, 300, 300);//画三次点曲线
    CGContextStrokePath(context);//开始画线

    //画一个方形图形 没有边框
    CGContextSetRGBFillColor(context, 0, 0.25, 0, 0.5); //方框的填充色
    CGContextFillRect(context, CGRectMake(5, 150, 100, 100)); //画一个方框

    //画弧线
    CGContextSetRGBStrokeColor(context, 0.3, 0.4, 0.5, 1);//线条颜色
    CGContextAddArc(context, 180, 200, 50, 0, 180*(M_PI/180), 0);

    CGContextStrokePath(context);//开始画线

    //画方形边框
    CGContextRef context5 = UIGraphicsGetCurrentContext(); //设置上下文
    CGContextSetLineWidth(context5, 3.0);
    CGContextSetRGBStrokeColor(context5, 0.8, 0.1, 0.8, 1);
    CGContextStrokeRect(context5, CGRectMake(5, 5, 300, 400));//画方形边框, 参数2:方形的坐标。

    //画椭圆
    CGRect aRect= CGRectMake(80, 80, 160, 100);
    CGContextSetRGBStrokeColor(context, 0.6, 0.9, 0, 1.0);
    CGContextSetLineWidth(context, 3.0);
    CGContextAddEllipseInRect(context, aRect); //椭圆, 参数2:椭圆的坐标。
    CGContextDrawPath(context, kCGPathStroke);

    //画实心圆
    CGContextFillEllipseInRect(context, CGRectMake(95, 195, 200.0, 100));//画实心圆,参数2:圆坐标。可以是椭圆

    //画一个菱形
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextMoveToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 150);
    CGContextAddLineToPoint(context, 100, 200);
    CGContextAddLineToPoint(context, 50, 150);
    CGContextAddLineToPoint(context, 100, 100);
    CGContextStrokePath(context);

    //填充了一段路径:
    CGContextMoveToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 150);
    CGContextAddLineToPoint(context, 100, 200);
    CGContextAddLineToPoint(context, 50, 150);
    CGContextAddLineToPoint(context, 100, 100);
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextFillPath(context);
 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 从原图片中取小图  

//字符串的 写入可用  nsstring本身的画图方法
 -(CGSize)drawInRect:(CGRect)rect
            withFont:(UIFont *)font
       lineBreakMode:(UILineBreakMode)lineBreakMode
           alignment:(UITextAlignment)alignment;来写进去即可  

//对图片放大缩小的功能就是慢了点
 UIGraphicsBeginImageContext(newSize);
 UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();  

 CGColorGetComponents() 返回颜色的各个直 以及透明度 可用只读const float 来接收  是个数组  

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

//实现逐变颜色填充方法 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来填充形状内的颜色.  

//填充一个路径的时候,路径里面的子路径都是独立填充的。
//假如是重叠的路径,决定一个点是否被填充,有两种规则
 1,nonzero winding number rule:非零绕数规则,假如一个点被从左到右跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。
 2,even-odd rule: 奇偶规则,假如一个点被跨过,那么+1,最后是奇数,那么要被填充,偶数则不填充,和方向没有关系。  

 CGContextEOFillPath //使用奇偶规则填充当前路径
 CGContextFillPath //使用非零绕数规则填充当前路径
 CGContextFillRect //填充指定的矩形
 CGContextFillRects //填充指定的一些矩形
 CGContextFillEllipseInRect //填充指定矩形中的椭圆
 CGContextDrawPath //两个参数决定填充规则,kCGPathFill表示用非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathFillStroke表示填充,kCGPathEOFillStroke表示描线,不是填充  

//设置当一个颜色覆盖上另外一个颜色,两个颜色怎么混合
//默认方式是
 result = (alpha * foreground) + (1 - alpha) * background  

 CGContextSetBlendMode :设置blend mode.
 CGContextSaveGState :保存blend mode.
 CGContextRestoreGState:在没有保存之前,用这个函数还原blend mode.
 CGContextSetBlendMode 混合俩种颜色
时间: 2024-10-10 09:05:25

iOS CGContextRef画图小结的相关文章

iOS CGContextRef画图时的常用方法

UIView的drawRect方法 CoreGraphics绘图 综述:描述系统会调用UIView的drawRect方法,所以coreGraphics的所有实现代码放在该函数内,setNeedsDisplay是更新整个视图,setNeedsDisplayInRect是更新视图的一个区域. CGContextRef context = UIGraphicsGetCurrentContext();设置上下文 CGContextMoveToPoint 开始画线 CGContextAddLineToPo

iOS CGContextRef画图常用

CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文 //画一条线 CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);//线条颜色 CGContextSetLineWidth(context, 5.0);//线条宽度 CGContextMoveToPoint(context, 20, 20); //开始画线, x,y 为开始点的坐标 CG

ios:CGContextRef 渲染中文问题

1.项目中遇到drawRect来渲染中文,但是调用CGContextShowTextAtPoint方法失败,于是查了些资料整理总结一下 2.既然apple能显示中文,那么自然也是支持中文的. 查看所有字体: NSArray *fontFamilies = [UIFontfamilyNames]; for(NSString *fontFam in fontFamilies) { NSLog(@"=========%@=========",fontFam); NSArray *fontNa

CGContextRef画图初体验

这是第一次使用CGContextRef画图,主要UIButton设置圆角,一设置就是四个角都是圆的,目前我还不知道有什么方法,可以单独设置某个角是圆形,其他的角仍然是矩形.我的一个想法是继承UIButton自己画图,来实现.好一番折腾,终于出效果. 其实在网上查一查,就可以找到用CGContextRef如何画圆,画线之类的方法,我只不过把这些综合起来而已.下面贴代码,代码里有相关注释,希望能帮助解读. @interface FillterButton () {     CGFloat _radi

iOS推送小结

iOS推送小结 (吐槽,md的代码编辑功能不知道是不会用还是确实不好用) 1.推送配置 1.1证书配置 请自行谷百. 1.2注册推送 //代码来源:环信Demo //In method application:(UIApplication *)application didFinishLaunchingWithOptions: UIApplication *application = [UIApplication sharedApplication]; //注册APNS if([applicat

iOS线程开发小结

/* 方法名决定是否开启新线程(async,sync),队列类型(全局队列,串行队列)决定开启多少条线程 1.快速线程调用 *开启后台线程执行任务 [self performSelectorInBackground:@selector(test) withObject:nil]; *回到主线程执行任务 [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES]; 2.GCD

iOS性能优化小结

iOS性能优化分析 首先要熟悉几个概念 PNG 和 JPG 的区别是什么? png格式的图片有alpha通道,jpeg则没有.png无损压缩,jpeg允许你选择0-100%的压缩质量.如果需要alpha通道(透明),就只能用png格式. CPU 和 GPU 如果想看看两者的区别,先得了解iOS视图背后的层级结构原理  上图中的最底下一行是硬件层,由GPU和CPU组成. 我们经常说到的硬件加速其实是指OpenGL,Core Animation/UIKit基于GPU之上对计算机图形合成以及绘制的实现

AIR for IOS开发问题小结

昨天终于成功地向APP STORE提交了应用,个人感觉用AIR做IOS开发就是个坑啊.出了问题之后,问苹果的技术支持,人家说“对于非XCODE环境下开发及发布所造成的问题我们在资料库中无法找到相应的解决方案”.那问adobe的技术支持吧,“你按照开发者中心的教程执行了吗?”“是的”“你能成功生成IPA文件吗?”“是的”“OK,那么你的问题应该去找苹果的技术支持”....我++,简直有种在天朝上访被踢皮球的感觉. 所以,我将我遇到的问题在这里一一记录下来,以便备忘及帮助到同样适用AIR开发IOS的

iOS Quartz2D画图

对于刚接触Quartz2D的同学来说,先了解 上下文 的概念,再从最基础的画线来具体体验Quartz2D的画图步骤 介绍Quart2D :是苹果官方的二维(平面)绘图引擎,同时支持iOS和macOS系统,它的API是纯C语言的,它可以绘制图形.绘制文字.绘制图片.截图.自定义UI控件 在iOS开发中,Quartz2D最常用来自定义UI控件. Quartz2D画图步骤: 1:获取图形上下文对象 2 向图形上下文对象中添加路径,绘图属性等等 3 渲染(把图形上下文中的路径绘制到对应的输出设备上) 介