zoukankan      html  css  js  c++  java
  • 1.1 Quartz 2D 绘图

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
    如果觉得本文内容过长,请前往本人 “简书
     
    Quartz2D 绘图主要步骤:
     
    1. 获取【图形上下文】对象 —— (拿到草稿纸)
    2. 向【图形上下文】对象中添加【路径】
     
    2.1 拼接路径(画内容)
    2.2 添加路径到上下文(把内容放在草稿纸上)
    3. 渲染 ——(把【图形上下文】中的图形绘制到对应的设备上)(根据草稿纸上的内容显示出来东西)
     关键方法:
     1 // 获取上下文
     2 CGContextRef ctx = UIGraphicsGetCurrentContext();
     3 
     4 // 创建可变路径(c)
     5 CGMutablePathRef path = CGPathCreateMutable();
     6 
     7 // 把路径放在上下文当中
     8 CGContextAddPath(ctx, path);
     9 
    10 // 创建路径对象(oc)
    11 UIBezierPath* path = [UIBezierPath bezierPath];
    12 
    13 // 渲染
    14 CGContextStrokePath(ctx);
     
    Quartz2D 绘图方式:
     
    方式一:直接调用 Quartz2D 的 API 进行绘图
     
    • 代码量稍大
    • 功能全面
     
    步骤:
    1、获取绘图上下文
    2、把图形绘制到绘图上下文上
    3、把绘图上下文上的图形渲染到对应的设备上
    方式二:调用 UIKit 框架封装好的 API 进行绘图(通过创建路径对象的方式来绘图)
     
    • 代码相对简单
    • 只对部分 Quartz2D 的 API 做了封装
    • 对于没有封装的功能只能调用 Quartz2D 原生 API
    • 相关类: CGPathRef 、 CGMutablePathRef
     
    步骤:
    1、先把图形缓存到"路径对象"中,
    2、然后再把路径对象添加到上下文对象中
    3、最后再把上下文对象渲染到对应的设备上
     
    比如:画图片、文字到控件上。(UIKit 已经封装好了)
     
     
     
    代码示例:
    方法1:
     1 #import “TDView.h"
     2 
     3 @implementation TDView
     4 - (void)drawRect:(CGRect)rect {
     5 
     6   // 1.获取,当前的layer类型的,图形上下文
     7   CGContextRef ctx = UIGraphicsGetCurrentContext();
     8 
     9   // 2.拼接路径,同时,把路径添加到上下文当中(下面代码是搞一条线段)
    10   CGContextMoveToPoint(ctx, 50, 50);
    11   CGContextAddLineToPoint(ctx, 100, 100);
    12 
    13   // 3.渲染(绘制路径)<把 上下文中的 路径 移动到 UIView 上>
    14   CGContextStrokePath(ctx); // StrokeXxxx 表示画线(边线)(空心图形)
    15   CGContextFillPath(ctx); // FillXxx 表示画填充的图形(实心图形)
    16 }
    17 @end

    方法2:

     1 - (void)test2
     2 {
     3     // 1.获取图形上下文(layer)
     4     CGContextRef ctx = UIGraphicsGetCurrentContext();
     5 
     6     // 2.拼接路径
     7     CGMutablePathRef path = CGPathCreateMutable();
     8     CGPathMoveToPoint(path, NULL, 50, 50);
     9     CGPathAddLineToPoint(path, NULL, 100, 100);
    10 
    11     // 3.把路径添加到上下文当中
    12     CGContextAddPath(ctx, path);
    13 
    14     // 4.渲染
    15     CGContextStrokePath(ctx);
    16 }
     


    如有疑问,请发送邮件至 shorfng@126.com 联系我。
     
    By:蓝田(Loto)
     
  • 相关阅读:
    实现一个基本的静态文件服务的Web服务器
    Http模块
    Java环境
    HelloWorld
    HTTP(s)
    第16条:复合优先于继承
    Tomcat配置https
    第15条:使可变性最小化
    第14条:在公有类中使用访问 方法而非公有域
    第13条:使类和成员的可访问性最小化
  • 原文地址:https://www.cnblogs.com/shorfng/p/5124360.html
Copyright © 2011-2022 走看看