iOSView绘制相关

iOS绘图框架

在这里插入图片描述

iOS的绘图框架有多种,我们平常最常用的就是UIKit,其底层是依赖CoreGraphics实现的,而且绝大多数的图形界面也都是由UIKit完成,并且UIImage、NSString、UIBezierPath、UIColor等都知道如何绘制自己,也提供了一些方法来满足我们常用的绘图需求。除了UIKit,还有CoreGraphics、Core Animation,Core Image,OpenGL ES等多种框架,来满足不同的绘图要求。各个框架的大概介绍如下:

UIKit:最常用的视图框架,封装度最高,都是OC对象

CoreGraphics:主要绘图系统,常用于绘制自定义视图,纯C的API,使用Quartz2D做引擎

CoreAnimation:提供强大的2D和3D动画效果

CoreImage:给图片提供各种滤镜处理,比如高斯模糊、锐化等

OpenGL-ES:主要用于游戏绘制,但它是一套编程规范,具体由设备制造商实现

绘图步骤

iOS中,完成一个UIView的绘图需要包含两个步骤:绘制和布局。

  • 当一个UIView调用了setNeedsDisplay时,视图会被标记为“需要重新绘制”,那么在下一个绘制周期中,会调用UIView的drawRect方法进行绘制。
  • 当一个UIView调用了setNeedsLayout时,表示该视图需要被“重新布局”,然后就会自动调用该UIView的layoutSubviews方法以及它的子视图的layoutSubviews。

绘制:drawRect。

drawRect提供了一个矩形画布供我们绘制图案。这一部分由CPU负责。

以下是来自官方文档的描述:

1、这个方法默认是不做任何事情的,如果我们这个View只是单纯设置一些背景或者使用layer对象来直接设置一些内容,那么我们不需要重写这个方法。当我们需要使用Core Graphics和UIKit来绘制这个View的内容时,我们需要重写这个方法。
2、当这个方法被调用时,这个View的环境已经被配置完成。你可以调用绘制的方法来渲染你的内容。你可以通过UIGraphicsGetCurrentContext。文档中还提到不要建立一个强引用UIGraphicsGetCurrentContext,因为它在多次调用drawRect期间可以被改变。

触发重新绘制的时机:

  • 当遮挡你的视图的其他视图被移动或删除操作的时候
  • 将视图的hidden属性声明设置为No,使其从隐藏状态变为可见
  • 将视图滚出屏幕,然后再重新回到屏幕上
  • 显式调用视图的setNeedsDisplay或者setNeedsDisplayInRect:方法

布局:layoutSubviews。

我们需要在layoutSubviews中对子控件进行frame的设置(大小和位置)。这一部分由GPU负责

触发layoutSubviews的时机:

  • init初始化不会触发layoutSubviews
  • addSubview会触发layoutSubviews
  • 设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
  • 滚动一个UIScrollView会触发layoutSubviews
  • 旋转Screen会触发父UIView上的layoutSubviews事件
  • 改变一个UIView大小的时候也会触发父UIView上的layo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值