UIKit是高级别的图形接口,API基于Objective-C,能够访问绘图、动画、字体、图片等内容。
Quartz 2D是iOS和Mac OS X环境下的2D绘图引擎。涉及内容包括:基于路径的绘图、透明度绘图、遮盖、阴影、透明层、颜色管理、防锯齿渲染、生成PDF以及PDF元数据相关处理。
绘制视图
视图绘制周期
在iOS上,首先为需要绘制的视图或视图的部分区域设置一个需要绘制的标志,在事件循环的每一轮中,绘图引擎会检查是否有需要更新的内容,如果有就会调用视图的drawRect:方法进行绘制。
setNeedsDisplay是重新绘制整个视图,setNeedsDisplayInRect是重新绘制视图的部分区域。
何时会触发视图重新绘制的操作:
- 当遮挡的视图被移动或删除的时候;
- hidden属性从yes变成No时;
- 视图滚出屏幕后又重新回来;
- 调用setNeedsDisplay和setNeedsDisplayInRect方法的时候。
绘制实例:填充矩形
#import "FillingView.h"
@implementation FillingView
-(instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
}
return self;
}
- (void)drawRect:(CGRect)rect
{
[[UIColor brownColor] setFill];
UIRectFill(rect);
}
@end
这是用了UIkit的API。
填充与描边
UIKit提供的关于绘图的API:
- UIRectFill(CGRect rect),填充矩形函数;
- UIRectFrame(CGRect rect),矩形描边函数;
- UIBezierPath,绘制常见路径类。
- (void)drawRect:(CGRect)rect
{
[[UIColor brownColor] setFill];
UIRectFill(rect);
[[UIColor whiteColor] setStroke];
CGRect frame = CGRectMake(20, 30, 100, 300);
UIRectFrame(frame);
}
绘制图像和文本
UIImage类中绘制图像的主要方法:
- -drawAtPoint:(CGPoint)point,设置绘制定点;
- -drawInRect:(CGRect)rect,图片绘制在指定的矩形里;
- -drawAsPatternInRect:(CGRect)rect,在指定的矩形里平铺绘制图片,如果图片大于矩形,就和1类似,如果小于,就用多个图像铺满;
NSString类中绘制文本的主要方法:
- -(void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs,文本在指定点绘制;
- -(void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs,文本在指定矩形内绘制。
- (void)drawRect:(CGRect)rect
{
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"dog" ofType:@"jpg"];
UIImage *myImageObj = [[UIImage alloc] initWithContentsOfFile:imagePath];
[myImageObj drawInRect:CGRectMake(0, 40, 320, 400)];
NSString *s = @"我的小狗";
UIFont *font = [UIFont systemFontOfSize:34];
NSDictionary *attrs = @{NSFontAttributeName : font};
[s drawAtPoint:CGPointMake(100, 20) withAttributes:attrs];
}