#import <UIKit/UIKit.h> @interface MyView : UIView @end
#import "MyView.h" @implementation MyView -(void) drawRect:(CGRect)rect{ //1.取出上下文 --当前绘图的位置(设备) CGContextRef context = UIGraphicsGetCurrentContext(); [self drawLine]; } #pragma mark 绘制直线2,使用默认context进行绘图 -(void)drawLine2{ //1. 获取上下文 CGContextRef context = UIGraphicsGetCurrentContext(); //2. 设置路径 //1)设置起始点 CGContextMoveToPoint(context, 50, 50); //2)增加点 CGContextAddLineToPoint(context, 200, 200); CGContextAddLineToPoint(context, 50, 200); //3)关闭路径 CGContextClosePath(context); //3 设置属性 /* UIkit 默认会导入Core Grapthics,UIKit对常用的很多CG方法做了封装 UIColor setStroke 设置变形颜色 UIColor setFill 设置填充颜色 UIColor set 设置边线和填充颜色 */ //设置边线 // [[UIColor redColor]setStroke]; //设置填充 // [[UIColor blueColor]setFill]; [[UIColor greenColor]set]; //4 绘制路径 CGContextDrawPath(context, kCGPathFillStroke); } #pragma mark 绘制直线 -(void) drawLine{ //提示:使用Ref声明的对象,不需要用* //1. 获取上下文 - UIView对应的上下文 CGContextRef context = UIGraphicsGetCurrentContext(); //2. 创建路径并设置路径(可变路径) /** 注意:当我们开发动画的时候,通常需要指定对象运动的路线,然后由动画方法负责实现动画效果 因此,在动画开发中,需要熟练使用路径 */ CGMutablePathRef path =CGPathCreateMutable(); //划线 // 1)设置起始点 CGPathMoveToPoint(path, NULL, 50, 50); // 2)设置中间点 // 3)设置目标点 CGPathAddLineToPoint(path, NULL, 200, 200); CGPathAddLineToPoint(path, NULL, 50, 200); // 4) 设置封闭路径 // a) 直接指定目标点 //CGPathAddLineToPoint(path, NULL, 50, 50); // b)使用关闭路径 CGPathCloseSubpath(path); //3. 将路径添加到上下文 CGContextAddPath(context, path); //4. 设置上下文属性(状态) /** 设置线条颜色 red 0 ~ 1.0 red / 255 green 0 ~ 1.0 green / 255 blue 0 ~ 1.0 blue / 255 alpha 透明度 0 ~ 1.0 0 - 完全透明 1.0 ~ 完全不透明 提示:1)使用RGB颜色设置时,最好不要同时指定RGB和alpha,性能损耗 2) 默认线条和填充颜色都是黑色 */ CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1.0); CGContextSetRGBFillColor(context, 0, 1, 0, 1.0); //设置线条宽度 CGContextSetLineWidth(context, 5.0f); //设置线条的顶点样式 CGContextSetLineCap(context, kCGLineCapRound); //设置线条的链接点样式 CGContextSetLineJoin(context, kCGLineJoinRound); //设置线条虚线样式 /* 虚线参数 context: phase:相位、虚线起始位置,通常使用0,从都开始画 lengths:长度数组 count lengths:数组个数 */ CGFloat lengths[3] = {10,20,30}; CGContextSetLineDash(context, 0, lengths, 3); //5. 绘制路径 /** kCGPathStroke 画线(空心) kCGPathFill 填充(实心) kCGPathFillStroke 即画线又填充 */ CGContextDrawPath(context, kCGPathFillStroke); //6. 释放路径 CGPathRelease(path); } @end