UIKit与Quartz 2D简介,用UIKit绘制视图

UIKit是高级别的图形接口,API基于Objective-C,能够访问绘图、动画、字体、图片等内容。

Quartz 2D是iOS和Mac OS X环境下的2D绘图引擎。涉及内容包括:基于路径的绘图、透明度绘图、遮盖、阴影、透明层、颜色管理、防锯齿渲染、生成PDF以及PDF元数据相关处理。

绘制视图

视图绘制周期

在iOS上,首先为需要绘制的视图或视图的部分区域设置一个需要绘制的标志,在事件循环的每一轮中,绘图引擎会检查是否有需要更新的内容,如果有就会调用视图的drawRect:方法进行绘制。

setNeedsDisplay是重新绘制整个视图,setNeedsDisplayInRect是重新绘制视图的部分区域。

何时会触发视图重新绘制的操作:

  1. 当遮挡的视图被移动或删除的时候;
  2. hidden属性从yes变成No时;
  3. 视图滚出屏幕后又重新回来;
  4. 调用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:

  1. UIRectFill(CGRect rect),填充矩形函数;
  2. UIRectFrame(CGRect rect),矩形描边函数;
  3. UIBezierPath,绘制常见路径类。
- (void)drawRect:(CGRect)rect
{
    [[UIColor brownColor] setFill];
    UIRectFill(rect);
    
    [[UIColor whiteColor] setStroke];
    CGRect frame = CGRectMake(20, 30, 100, 300);
    UIRectFrame(frame);
}

绘制图像和文本

UIImage类中绘制图像的主要方法:

  1. -drawAtPoint:(CGPoint)point,设置绘制定点;
  2. -drawInRect:(CGRect)rect,图片绘制在指定的矩形里;
  3. -drawAsPatternInRect:(CGRect)rect,在指定的矩形里平铺绘制图片,如果图片大于矩形,就和1类似,如果小于,就用多个图像铺满;

NSString类中绘制文本的主要方法:

  1. -(void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs,文本在指定点绘制;
  2. -(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];
}

猜你喜欢

转载自blog.csdn.net/run_in_road/article/details/113180963