drawRect方法
来源:互联网 发布:阿里云ecs远程桌面 编辑:程序博客网 时间:2024/05/19 05:04
1,iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。
2,在UIView中,重写drawRect: (CGRect)aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被掉用一次.
当某些情况下想要手动重画这个View,只需要掉用[self setNeedsDisplay]方法即可.(调用setNeedsDisplay会自动调用drawRect)。
drawRect调用是在Controller->loadView,Controller->viewDidLoad两方法之后调用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些Viewdraw的时候需要用到某些变量值).
3,drawRect在以下情况下会被调用:
b、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
c、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
d、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。
drawRect方法使用注意点:
1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate的contextRef并且不能用于画图。drawRect:方法不能手动显式调用,必须通过调用setNeedsDisplay
其他
1,UIView的setNeedsDisplay和setNeedsLayout方法
首先两个方法都是异步执行的。而setNeedsDisplay会自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。
2,
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[_shape draw:context];
}
- (void)draw:(Shape *)shape
{
_shape = shape;
[self setNeedsDisplay]; //setNeedsDisplay会自动调用drawRect方法
//否则_shape压根就没被赋值。没法画。而- (void)drawRect:(CGRect)rect 此方法又不能手动调用,因此系统提供给我们可以手动调用的setNeedsDisplay方法,此方法会自动调用drawRect方法。
}
- drawRect方法
- drawRect方法
- drawRect方法
- 关于UIView drawRect方法
- UIView的drawRect方法
- UIView的drawRect方法
- UIView中的drawRect方法
- drawRect:(CGRect)rect方法
- 重新调用drawRect方法
- drawRect方法的调用
- drawRect方法绘图
- ios-drawrect方法解析
- drawRect方法使用优化方法
- drawRect方法实现进度条progress
- iphone 强制刷新drawRect方法
- 关于 Drawrect方法的使用
- iOS快速更新drawRect方法
- drawRect方法的参数详解
- python 函数参数的传递(参数带星号的说明)
- Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)
- 关于硬盘分区(主分区、扩展分区和逻辑分区)
- 【iOS XMPP】使用XMPPFramewok(三):好友状态
- HDU 1520 Anniversary party | 树形dp
- drawRect方法
- IP地址与子网划分问题
- Python Client For Redis On Windows
- 两分钟彻底让你明白Android Activity生命周期(图文)
- 【iOS XMPP】使用XMPPFramewok(四):收发消息
- Java 线程池学习--线程池ThreadPoolExecutor使用简介
- JQuery EasyUi之界面设计——前言与界面效果(一)
- 织梦后台登陆不上提示验证码不正确
- JAVA基础知识回顾之---方法中的参数传递