基本步骤
1.获得图形上下文

CGContextRef ctx= UIGraphicsGetCurrentContext();

2.拼接路径(下面代码是搞一条线段)

CGContextMoveToPoint(ctx,10, 10);

CGContextAddLineToPoint(ctx,100, 100);

3.绘制路径    
CGContextStrokePath(ctx); //CGContextFillPath(ctx); (实心)

绘制线段     画矩形可以让线段变粗      设置起点 然后设置后面的点

    // Drawing code// 1.获得图形上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.拼接图形(路径)// 设置线段宽度CGContextSetLineWidth(ctx, 10);// 设置线段头尾部的样式CGContextSetLineCap(ctx, kCGLineCapRound);// 设置线段转折点的样式CGContextSetLineJoin(ctx, kCGLineJoinRound);/**  第1根线段  **/// 设置颜色CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);// 设置一个起点CGContextMoveToPoint(ctx, 10, 10);// 添加一条线段到(100, 100)CGContextAddLineToPoint(ctx, 100, 100);// 渲染一次CGContextStrokePath(ctx);/**  第2根线段  **/// 设置颜色CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1);// 设置一个起点CGContextMoveToPoint(ctx, 200, 190);// 添加一条线段到(150, 40)CGContextAddLineToPoint(ctx, 150, 40);CGContextAddLineToPoint(ctx, 120, 60);// 3.渲染显示到view上面CGContextStrokePath(ctx);

画矩形        设置颜色的时候  2中状态   空心与实心   简便办法就是颜色直接set

 // 1.获得上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.画矩形CGContextAddRect(ctx, CGRectMake(10, 10, 150, 100));// set : 同时设置为实心和空心颜色// setStroke : 设置空心颜色// setFill : 设置实心颜色[[UIColor whiteColor] set];//    CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);// 3.绘制图形CGContextFillPath(ctx);

画图片

// 1.取得图片UIImage *image = [UIImage imageNamed:@"me"];// 2.画
//    [image drawAtPoint:CGPointMake(50, 50)];
//    [image drawInRect:CGRectMake(0, 0, 150, 150)];[image drawAsPatternInRect:CGRectMake(0, 0, 200, 200)];     平铺的画图

画文字

 // 1.获得上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.画矩形CGRect cubeRect = CGRectMake(50, 50, 100, 100);          确认字放在规定的矩形中CGContextAddRect(ctx, cubeRect);// 3.显示所绘制的东西CGContextFillPath(ctx);// 4.画文字NSString *str = @"哈哈哈哈Good morning hello hi hi hi hi";//    [str drawAtPoint:CGPointZero withAttributes:nil];NSMutableDictionary *attrs = [NSMutableDictionary dictionary];// NSForegroundColorAttributeName : 文字颜色// NSFontAttributeName : 字体attrs[NSForegroundColorAttributeName] = [UIColor redColor];attrs[NSFontAttributeName] = [UIFont systemFontOfSize:50];[str drawInRect:cubeRect withAttributes:attrs];             <pre name="code" class="objc"><span style="white-space:pre">                                    </span>withAttributes     放一个可变字典  

画圆弧

// 1.获得上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.画圆弧// x\y : 圆心// radius : 半径// startAngle : 开始角度// endAngle : 结束角度// clockwise : 圆弧的伸展方向(0:顺时针, 1:逆时针)CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);// 3.显示所绘制的东西CGContextFillPath(ctx);

怎么样在画第一个结束  不影响第二个

CGContextSaveGState(ctx);<pre name="code" class="objc">将ctx拷贝一份放到栈中            等于有2个存储点   这个存完以后 下一行代码销毁用过的备份
// 将栈顶的上下文出栈,替换当前的上下文CGContextRestoreGState(ctx);

 // 1.获得上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 将ctx拷贝一份放到栈中CGContextSaveGState(ctx);// 设置绘图状态CGContextSetLineWidth(ctx, 10);[[UIColor redColor] set];CGContextSetLineCap(ctx, kCGLineCapRound);// 第1根线CGContextMoveToPoint(ctx, 50, 50);CGContextAddLineToPoint(ctx, 120, 190);CGContextStrokePath(ctx);// 将栈顶的上下文出栈,替换当前的上下文CGContextRestoreGState(ctx);// 第2根线CGContextMoveToPoint(ctx, 10, 70);CGContextAddLineToPoint(ctx, 220, 290);CGContextStrokePath(ctx);
//    CGContextDrawPath(ctx, kCGPathStroke);

图形的缩放与移动(矩阵操作)

    CGContextRef ctx = UIGraphicsGetCurrentContext();CGContextSaveGState(ctx);CGContextRotateCTM(ctx, M_PI_4 * 0.3);    //在旋转CGContextScaleCTM(ctx, 0.5, 0.5);<span style="white-space:pre">       </span>//缩放CGContextTranslateCTM(ctx, 0, 150);<span style="white-space:pre">     </span>//上下移动CGContextAddRect(ctx, CGRectMake(10, 10, 50, 50));CGContextStrokePath(ctx);CGContextRestoreGState(ctx);CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100));CGContextMoveToPoint(ctx, 100, 100);CGContextAddLineToPoint(ctx, 200, 250);CGContextStrokePath(ctx);

循环时间

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];     默认1秒60次   适合1秒以下//    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];

//适合1秒以上

把某个控件单独拿出来用时   可以单独写入文件

CGContextRef ctx = UIGraphicsGetCurrentContext();// 1.先创建一个路径CGMutablePathRef linePath = CGPathCreateMutable();// 2.拼接路径CGPathMoveToPoint(linePath, NULL, 0, 0);CGPathAddLineToPoint(linePath, NULL, 100, 100);// 3.添加路径到上下文CGContextAddPath(ctx, linePath);CGMutablePathRef circlePath = CGPathCreateMutable();CGPathAddArc(circlePath, NULL, 150, 150, 50, 0, M_PI * 2, 0);CGContextAddPath(ctx, circlePath);// 4.渲染CGContextStrokePath(ctx);CGPathRelease(linePath);CGPathRelease(circlePath);CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();CGColorSpaceRelease(cs);

水印

+ (instancetype)waterImageWithBg:(NSString *)bg logo:(NSString *)logo
{UIImage *bgImage = [UIImage imageNamed:bg];// 1.创建一个基于位图的上下文(开启一个基于位图的上下文)UIGraphicsBeginImageContextWithOptions(bgImage.size, NO, 0.0);// 2.画背景[bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width, bgImage.size.height)];// 3.画右下角的水印UIImage *waterImage = [UIImage imageNamed:logo];CGFloat scale = 0.2;     //比例CGFloat margin = 5;<span style="white-space:pre">     </span>/间距CGFloat waterW = waterImage.size.width * scale;CGFloat waterH = waterImage.size.height * scale;CGFloat waterX = bgImage.size.width - waterW - margin;CGFloat waterY = bgImage.size.height - waterH - margin;[waterImage drawInRect:CGRectMake(waterX, waterY, waterW, waterH)];// 4.从上下文中取得制作完毕的UIImage对象UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();// 5.结束上下文UIGraphicsEndImageContext();        //begin开始 end结尾return newImage;
}

图片的裁剪

+ (instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor
{// 1.加载原图UIImage *oldImage = [UIImage imageNamed:name];// 2.开启上下文CGFloat imageW = oldImage.size.width + 2 * borderWidth;CGFloat imageH = oldImage.size.height + 2 * borderWidth;CGSize imageSize = CGSizeMake(imageW, imageH);UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);// 3.取得当前的上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 4.画边框(大圆)[borderColor set];CGFloat bigRadius = imageW * 0.5; // 大圆半径CGFloat centerX = bigRadius; // 圆心CGFloat centerY = bigRadius;CGContextAddArc(ctx, centerX, centerY, bigRadius, 0, M_PI * 2, 0);CGContextFillPath(ctx); // 画圆// 5.小圆CGFloat smallRadius = bigRadius - borderWidth;CGContextAddArc(ctx, centerX, centerY, smallRadius, 0, M_PI * 2, 0);// 裁剪(后面画的东西才会受裁剪的影响)CGContextClip(ctx);// 6.画图[oldImage drawInRect:CGRectMake(borderWidth, borderWidth, oldImage.size.width, oldImage.size.height)];// 7.取图UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();// 8.结束上下文UIGraphicsEndImageContext();return newImage;
}

屏幕截图

+ (instancetype)captureWithView:(UIView *)view
{// 1.开启上下文UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);// 2.将控制器view的layer渲染到上下文[view.layer renderInContext:UIGraphicsGetCurrentContext()];// 3.取出图片UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();// 4.结束上下文UIGraphicsEndImageContext();return newImage;
}
- (IBAction)clip {dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{// 1.捕捉UIImage *newImage = [UIImage captureWithView:self.view];// 2.写文件NSData *data = UIImagePNGRepresentation(newImage);NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];[data writeToFile:path atomically:YES];});
}

quartz 2D 总结相关推荐

  1. Quartz 2D Programming Guide笔记

    ###Graphics Contexts图形上下文### 图形上下文(graphics context)是绘制目标,可以理解为画布,包含着绘图时的参数和设备信息.类型为CGContextRef.获取g ...

  2. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  3. iOS 2D绘图详解(Quartz 2D)之概述

    原创Blog,转载请注明出处  http://blog.csdn.net/hello_hwc?viewmode=list 前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView ...

  4. Quartz 2d绘图

    今天看了一下Quartz 2D绘图,我只想说:不要把绘图和动画那些东西当做一个很复杂的东西,其实只要你认真看还是可以理解的.他们并不难.啰嗦了几句,现在直接进入正题: 前提是我们必须新建一个singl ...

  5. iOS开发之Quartz 2D绘图

    2019独角兽企业重金招聘Python工程师标准>>> Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 Quartz 2D API可以实现许多功能,如 ...

  6. iPhone开发笔记[1/50]:初学iPhone上用Quartz 2D画图

    参考了An iOS 4 iPhone Graphics Drawing Tutorial using Quartz 2D这篇文章,用了30分钟在iPhone上画出了一条直线,核心代码全在drawRec ...

  7. 绘图与滤镜全面解析--Quartz 2D 、Core Image

    绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...

  8. Quartz 2D 涂鸦

    转载自:http://blog.csdn.net/sinat_27706697/article/details/46041769 这一节,我将介绍使用Quartz 2D实现的一个实例 -- 涂鸦.在介 ...

  9. quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)

    //************************************************************************************************** ...

  10. 在iOS5中使用Quartz 2D创建PDF-第二部分

    翻译自:How To Create a PDF with Quartz 2D in iOS 5 – Part 2 在第一部分,我们为PDF创建了框架,使用Quartz 2D绘制了基本的文字和线条. 由 ...

最新文章

  1. 认证概述散列函数数字签名
  2. Python—实训day7下—Pandas统计分析基础
  3. Attentive Sequence to Sequence Networks
  4. 移动端iphone抓包调试神器—Stream安装和使用(一)
  5. OFFICE拼写语法检查:全部忽略、全部更正的功能
  6. 影视剧中的歌曲怎么录制 怎么录背景音乐
  7. 【汇编】2、从汇编源码逐步分析函数调用过程
  8. 北大计算机就业报告,北京大学信息科学技术学院解读和毕业生就业统计
  9. myeclipse中设置括号匹配颜色
  10. 高德地图添加导航依赖冲突 com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
  11. 视频转语音,语音转文字
  12. 液晶屏及液晶模组英文行业术语
  13. Node.js接入支付宝(蚂蚁金服)支付
  14. CC00416.CloudKubernetes——|KuberNetesNetworkPolicy.V08|——|NetworkPolicy.v08|隔离中间件服务.v04|
  15. 次世代zbrush骷颅头高模雕刻 艺术头骨SP模型材质贴图讲解
  16. java runnable main_【BUG】”main” prio=5 tid=1 RUNNABLE
  17. Yura and Developers
  18. level 1与level 2的区别
  19. 基础 | 并发编程 - [LockSupport]
  20. 【沁恒CH32学习】——RISC-V架构学习笔记

热门文章

  1. JetPack Room数据库组件使用方式
  2. 偏微分方程:计算基本理论
  3. Kafka mirroring (MirrorMaker) 和 uReplicator 快速开始
  4. uni-app。APP-PLUS 获取应用缓存,缓存清除
  5. 树莓派TCP传输协议(socket通信) 一发一收与多发多收
  6. C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)
  7. C# Winfrom Excel表格导出 Aspose.Cells超简单方式
  8. 【linux命令】df和du的区别、文件系统
  9. 正则表达式切掉log日志前面不需要的内容
  10. sap 流程图 退货销售订单_销售订单_退货入库及退款(采用高级退货)