• 关于 IOS中 绘制图形的问题


    关于 IOS中 绘制图形的问题

     

    在 IOS 中 自定义控件

     

    绘图,图表,progress  都可以去绘制,绘制的思路很重要。

     

    Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics。

     

    共有两种部分组成Quartz:

    Quartz Compositor,合成视窗系统,管理和合成幕后视窗影像来建立Mac OS X使用者接口。

    Quartz 2D,是iOS和Mac OS X环境下的二维绘图引擎。

    涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理,防锯齿渲染,生成PDF,以及PDF元数据相关处理。

     

    CoreGraphics.framework  框架 帮助你创建图形

     

    Quartz Core 包含了  Core Animation 框架 接口 (主要是有一个layer层的操作)

     

    Quartz坐标

    Quartz技术最开始为Mac OS X系统设计的图形技术,它的坐标原点位于左下角。

     

    UIKit坐标

     

    UIKit坐标与Quartz不同,原点位于右上角。在iOS中的UIView等控件都是基于此坐标,由于在UIView使用了Quartz坐标有时候需要转换。

     

    /////////////////////************

    UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。

     

    UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。

     

    UIView 调用setNeedsDisplay会自动调用drawRect

    重写drawRect,调用setNeedsDisplay。不需要手动调用drawRect

     

    1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。2.该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。3.通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。4.直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0.以上1,2推荐;而3,4不提倡

     

    CALyer 层绘图

    1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate的ref并且不能用于画图。drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或者 setNeedsDisplayInRect ,让系统自动调该方法。2、若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法。3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕 (不能使用手势来画图

     

    CGPath  CGContext

    UIKit默认的坐标系统与Quartz不同。在UIKit中,原点位于左上角,y轴正方向为向下。UIView通过将修改Quartz的Graphics Context的CTM[原点平移到左下角,同时将y轴反转(y值乘以-1)]以使其与UIView匹配

  • 相关阅读:
    循环移位算法
    关于Java中2.0-1.1!=0.9的问题
    Java基础语法(三)
    Java基础语法(二)
    Java基础语法(一)
    关于Java运行机制
    Java从零开始(前篇)
    关于.ssh目录下的known_hosts文件的补充
    解决 bash cd too many arguments 报错
    Markdown学习笔记(一)
  • 原文地址:https://www.cnblogs.com/kevingod/p/3375484.html
Copyright © 2020-2023  润新知