1,画图中的两个方法的区别:c#
drawAtPoint:该方法以图片的实际大小来显示oop
drawInRect:该方法会将图片拉伸填充指定的整个rectspa
drawAsPatternInRect:该方法会将图片以实际大小平铺到指定的rect中图片
2,drawRect:方法调用的时间是当View调用viewWillAppear的时候系统调用,在该方法中,调用的时候能够在该方法中拿到layer的图层上下文。、内存
注意:drawRect方法是系统调用的,view不能调用,view能够经过调用setNeedDisplay来间接调用drawRect方法。get
: 程序启动,显示自定义的view。当程序第一次显示在咱们眼前的时候,程序会调用drawRect:方法,在里面获取了图形上下文(在内存中拥有了),而后利用图形上下文保存绘图信息,能够理解为图形上下文中有一块区域用来保存绘图信息,有一块区域用来保存绘图的状态(线宽,圆角,颜色)。直线不是直接绘制到view上的,能够理解为在图形上下文中有一块单独的区域用来先绘制图形,当调用渲染方法的时候,再把绘制好的图形显示到view上去。it
3,图形上下文栈渲染
CGContextSaveGState(ctx);date
方法,把当前获取的上下文拷贝一份,保存一份最纯洁的图形上下文。5 补充说明select
1.drawRect:
(1)为何要实现drawRect:⽅法才能绘图到view上?
由于在drawRect:⽅法中才能取得跟view相关联的图形上下文
(2)drawRect:⽅法在何时被调用?
当view第一次显示到屏幕上时(被加到UIWindow上显示出来)
调用view的setNeedsDisplay或者setNeedsDisplayInRect:时
第一个:
[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次。该定时器建立以后,默认是不会执行的,须要把它加载到消息循环中
图形上下文的做用:
(1)保存绘图信息、绘图状态
(2)决定绘制的输出目标(绘制到什么地⽅去?) (输出目标能够是PDF⽂文件、Bitmap或者显示器的窗口上)
相同的⼀套绘图序列,指定不一样的Graphics Context,就可将相同的图像绘制到不一样的目标上