iOS 绘图

绘图篇:

绘制直线:

// drawRect 可以通过实例化执行setNeedsDisplay方法手动触发调用

// drawRect 方法在类进行实例化时候都会调用,可以不适用setNeedsDisplay方法手动调用

 

- (void)drawRect:(CGRect)rect {

// 获取当前的图形上下文

CGContextRef context = UIGraphicsGetCurrentContext();

 

// 设置绘制的颜色

[COLOR1 setStroke];

 

// 设置线条的宽度

CGContextSetLineWidth(context, 2.0);

 

// 设置线条绘制的起始点

CGContextMoveToPoint(context, 100, 200);

 

// 添加线条路径

CGContextAddLineToPoint(context, 100, 300);

 

// 执行绘制路径操作

CGContextStrokePath(context);

 

}

 

绘制矩形:

//

// setFill 方法表示矩形内部填充的颜色, 通过CGContextDrawPath完成

- (void) drawCustomRect {

CGContextRef context = UIGraphicsGetCurrentContext();

[COLOR2 setFill];

CGContextSetLineWidth(context, 2.0);

 

// 添加矩形坐标和长宽

CGContextAddRect(context, CGRectMake(100, 400, 100, 200));

// CGContextStrokePath(context);

CGContextDrawPath(context, kCGPathFillStroke);

}

 

三角形绘制:

CGContextRef context = UIGraphicsGetCurrentContext();

[COLOR2 setFill];

CGContextSetLineWidth(context, 2.0);

// 创建一个可变路径

CGMutablePathRef pathRef = CGPathCreateMutable();

// 添加三个绘制坐标

CGPathMoveToPoint(pathRef, nil, 100, 200);

CGPathAddLineToPoint(pathRef, nil, 200, 300);

CGPathAddLineToPoint(pathRef, nil, 0, 30);

// 将路径添加到上下文

CGContextAddPath(context, pathRef);

// CGContextStrokePath(context);

// 执行图形的绘制

CGContextDrawPath(context, kCGPathFillStroke);

 

任意弧形绘制:

CGContextRef context = UIGraphicsGetCurrentContext();

[COLOR2 setFill];

CGContextSetLineWidth(context, 2.0);

// 创建一个可变路径

CGMutablePathRef pathRef = CGPathCreateMutable();

// 添加三个绘制坐标

CGPathMoveToPoint(pathRef, nil, 100, 200);

CGContextAddCurveToPath(context, 200, 100, 200, 300, 300, 200);

CGContextAddPath(context, pathRef);

// CGContextStrokePath(context);

// 执行图形的绘制

CGContextDrawPath(context, kCGPathFillStroke);

 

圆形绘制:

CGContextRef context = UIGraphicsGetCurrentContext();

[COLOR1 setFill];

CGContextSetLineWidth(context, 2.0);

 

// 绘制圆形使用的方法:

//

// CGContextAddArc(<#CGContextRef _Nullable c#>, <#CGFloat x#>, <#CGFloat y#>,

// <#CGFloat radius#>, <#CGFloat startAngle#>, <#CGFloat endAngle#>, <#int clockwise#>)

// x, y: 表示圆心的位置

// radius: 表示圆的半径长度

// startAngle: 起始的弧度(0-M_PI*2)

// endangle: 结束的弧度

// clockwise: 绘制的方向,0表示顺时针,1表示逆时针

//

// 绘制半圆只需要将弧度改为M_PI即可

// 通过CGContextClosePath(content); 将半圆闭合

 

CGContextAddArc(context, 200, 200, 150, 0, M_PI*2, 0);

CGContextAddPath(context, pathRef);

CGContextDrawPath(context, kCGPathFillStroke);

 

绘制文字:

//

//

 

NSString *str = @"hello world.";

// UIImage *img = [UIImage imageNamed:@"1.png"];

// [img drawAtPoint:CGPointMake(100, 100)];

 

// 自定义文字log属性, 设置文字大小以及文字截断的风格和颜色

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];

paragraphStyle.lineBreakMode = NSLineBreakByClipping;

 

NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:10.0],

NSParagraphStyleAttributeName:paragraphStyle,

NSForgroundColorAttributeName:[UIColor greenColor]};

// 执行字符串的绘制

[str drawInRect:CGRectMake(100, 100, 100, 10) withAttributes:dic];

 

UIView drawRect方法的调用条件

  1. 单纯调用init方法不会触发drawRect方法的执行
  2. 通过设置frame,可以触发drawRect方法的执行,比如initWithFrame方法初始化会自动触发drawRect执行
  3. 调用setNeedsDisplay方法会触发drawRect方法的执行(可以用来动态刷新界面的显示效果

 

 

你可能感兴趣的:(IOS,Objective-C)