zoukankan      html  css  js  c++  java
  • Quartz2D简单使用

    1,画图中的两个方法的区别:

    drawAtPoint:该方法以图片的实际大小来显示

    drawInRect:该方法会将图片拉伸填充指定的整个rect

    drawAsPatternInRect:该方法会将图片以实际大小平铺到指定的rect中

     

    2,drawRect:方法调用的时间是当View调用viewWillAppear的时候系统调用,在该方法中,调用的时候可以在该方法中拿到layer的图层上下文。、

    注意:drawRect方法是系统调用的,view不能调用,view可以通过调用setNeedDisplay来间接调用drawRect方法。

    : 程序启动,显示自定义的view。当程序第一次显示在我们眼前的时候,程序会调用drawRect:方法,在里面获取了图形上下文(在内存中拥有了),然后利用图形上下文保存绘图信息,可以理解为图形上下文中有一块区域用来保存绘图信息,有一块区域用来保存绘图的状态(线宽,圆角,颜色)。直线不是直接绘制到view上的,可以理解为在图形上下文中有一块单独的区域用来先绘制图形,当调用渲染方法的时候,再把绘制好的图形显示到view上去。

     
    在绘制图形区域,会去保存绘图状态区域中查找对应的状态信息(线宽,圆角,颜色),然后在绘图区域把对第一条直线绘制完成。其实在渲染之前,就已经把直线在绘制图形区域画好了。
    如图:
         
    说明:这些示意图和本文中的程序代码块,不具备一一对应关系,只是为了说明绘图的完整过程。
    调用渲染方法的时候,把绘制图形区域已经画好的图形直接显示到view上,就是我们看到的样子了。
    如图:
       
     

    3,图形上下文栈

    在获取图形上下文之后,通过 

    CGContextSaveGState(ctx);

     方法,把当前获取的上下文拷贝一份,保存一份最纯洁的图形上下文。
    在画第二条线之前,使用CGContextRestoreGState(ctx);方法,还原开始的时候保存的那份最纯洁的图形上下文。
    .图形上下文栈机制
    画第一条线的时候,会把当前的图形上下文拷贝一份保存到图形上下文栈中。
    画第二条线的时候,去图形上下文栈中取出栈顶的绘图信息,作为第二条线的状态信息,第二条线的状态信息也是据此(最初保存的那份图形上下文)进行绘制。
               
    注意:在栈里保存了几次,那么就可以取几次(比如不能保存了1次,取两次,在取第二次的时候,栈里为空会直接挂掉)。
     
    4,矩阵三个方法
    平移
    方法: CGContextTranslateCTM(<#CGContextRef c#>, <#CGFloat tx#>, <#CGFloat ty#>)
    缩放
    方法:CGContextScaleCTM(<#CGContextRef c#>, <#CGFloat sx#>, <#CGFloat sy#>)
    旋转
     方法: CGContextRotateCTM(ctx, M_PI_4);
     

    5 补充说明

    1.drawRect:

    (1)为什么要实现drawRect:⽅法才能绘图到view上?

    因为在drawRect:⽅法中才能取得跟view相关联的图形上下文

    (2)drawRect:⽅法在什么时候被调用?

    当view第一次显示到屏幕上时(被加到UIWindow上显示出来)

    调用view的setNeedsDisplay或者setNeedsDisplayInRect:时 

     
    6,  两个定时器

    第一个:

    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];

    说明: NSTimer一般用于定时的更新一些非界面上的数据,告诉多久调用一次

    第二个:

            CADisplayLink *display= [CADisplayLink displayLinkWithTarget:self selector:@selector(updateImage)];

            [display addToRunLoop:[NSRunLoopmainRunLoop] forMode:NSDefaultRunLoopMode];

      说明: CADisplayLink刷帧,默认每秒刷新60次。该定时器创建之后,默认是不会执行的,需要把它加载到消息循环中

     
     
    7,图形上下文
    图形上下文(Graphics Context):是一个CGContextRef类型的数据

    图形上下文的作用:

    (1)保存绘图信息、绘图状态
    (2)决定绘制的输出目标(绘制到什么地⽅去?) (输出目标可以是PDF⽂文件、Bitmap或者显示器的窗口上)

    相同的⼀套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上 

     
  • 相关阅读:
    m-n的随机整数 包括m n
    获取url参数 hash类型
    js 数组转带空格字符串
    产生n-m的随机数组
    js 判断android、IOS
    判断是否微信浏览器
    文本左右对齐方式css
    H5微信支付流程
    H5微信授权登录流程
    H5页面 input禁止弹出键盘
  • 原文地址:https://www.cnblogs.com/-boy/p/4158560.html
Copyright © 2011-2022 走看看