关于view重绘drawRect

在iOS开发中,重写view的drawRect方法可以实现自定义绘图。drawRect参数用于指定重绘区域,但不应直接调用。通过setNeedsDisplay或setNeedsDisplayInRect通知系统刷新。drawRect内部,每次调用都有新的图形上下文,应使用UIGraphicsGetCurrentContext获取。图形状态包括颜色、线宽等,可保存和恢复。drawRect中可绘制图像,如使用UIImage的drawAtPoint、drawInRect和drawAsPatternInRect方法。
摘要由CSDN通过智能技术生成

有了view的子类,只要重载一个方法drawRect

-(void)drawRect:(CGRect)aRect;

它的参数是个矩形,这个矩形就是你要重绘的区域,你可以忽略参数,它只是为了性能优化,只在固定的区域绘图.

注意!!!

永远不要去调用drawRect,因为drawRect不是让你调用的,而是系统会去调用的.

那怎么去告诉系统需要重绘呢?

你发送两个消息,setNeedsDisplay和setNeedsDisplayInRect.

-(void)setNeedsDisplay;

-(void)setNeedsDisplayInRect:(CGRect)aRect;

你们可以认为初始化的时候的设置是一个点,然后晚些系统查看所有需要重绘的东西,

然后把它们按顺序排列,因为有些东西可能会重叠,然后再非常高效的把需要的东西绘制出来.


这样做有两个好处,一是让系统依据层的情况最优化性能,

二是如果你的property有一些setter,当你设置的时候需要重绘,这种情况也被最优化了.

所以你所有的setter都会调用self的setNeedsDisplay来重绘.


如果有人用了你的view,然后调用了好几个这样的setter,只需要重绘一次.

每个setNeedsDisplay都被一起传过去,然后一次性画出来.而不是每次都重绘.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值