1 - (void)drawRect:(CGRect)rect { 2 3 NSLog(@"drawRect"); 4 5 //获取图形的上下文 6 CGContextRef context = UIGraphicsGetCurrentContext(); 7 // CGContextMoveToPoint(context, 20, 100); 8 // CGContextAddLineToPoint(context, 200, 200); 9 // CGContextStrokePath(context); 10 // [self drawTriangle:context]; 11 // [self drawRectWithContext:context]; 12 // [self drawCircle:context]; 13 // [self drawArc:context]; 14 // [self drawCurve:context]; 15 // [self drawEffect:context]; 16 // [self drawFont:context]; 17 // [self drawImage:context]; 18 // [self clipImage:context]; 19 } 20 21 22 //10。切割图片 23 -(void)clipImage:(CGContextRef)context 24 { 25 //切成圆形的 26 CGContextAddEllipseInRect(context, CGRectMake(20, 20, 50, 50)); 27 //切割操作 28 CGContextClip(context); 29 30 CGContextFillPath(context); 31 32 UIImage *image = [UIImage imageNamed:@"account_candou"]; 33 34 [image drawAtPoint:CGPointMake(20, 20)]; 35 36 37 } 38 39 //9.绘制图片 40 -(void)drawImage:(CGContextRef)context 41 { 42 //绘图是有先后顺序关系的 43 UIImage *image = [UIImage imageNamed:@"account_candou"]; 44 //[image drawAtPoint:CGPointMake(100, 100)]; 45 //可以放大或缩小 46 //[image drawInRect:CGRectMake(100, 100, 200, 200)]; 47 //平铺图片 48 [image drawAsPatternInRect:CGRectMake(100, 100, 200, 200)]; 49 50 51 } 52 53 //8.绘制文字 54 -(void)drawFont:(CGContextRef)context 55 { 56 57 NSString *str = @"老罗忘八端,不干人事"; 58 59 NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:30],NSForegroundColorAttributeName:[UIColor orangeColor]}; 60 //1.调用字符串的drawAtPoint方法能够将文字直接绘制到view上 61 // [str drawAtPoint:CGPointMake(10, 100) withAttributes:dict]; 62 //2. 63 [str drawInRect:CGRectMake(10, 100, 300, 100) withAttributes:dict]; 64 } 65 66 67 //7.画特效 68 -(void)drawEffect:(CGContextRef)context 69 { 70 //矩形 71 CGContextAddRect(context, CGRectMake(100, 100, 150, 150)); 72 //线宽 73 CGContextSetLineWidth(context, 10); 74 //线的颜色 75 CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 76 //填充颜色 77 CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 78 //设置透明度 79 CGContextSetAlpha(context, 0.5); 80 81 /** 82 * 设置阴影 83 * 84 * @param context#> <#context#> 上下文 85 * @param offset#> <#offset#> 相对于图的偏移 86 * @param blur#> <#blur#> 87 * 88 * @return <#return value description#> 89 */ 90 CGContextSetShadow(context, CGSizeMake(20, 20), 10); 91 92 //框的填充和内部填充同时显示 93 CGContextDrawPath(context,kCGPathFillStroke); 94 //CGContextStrokePath(context); 95 } 96 97 98 99 100 //6.画曲线 101 -(void)drawCurve:(CGContextRef)context 102 { 103 //曲线起点 104 CGContextMoveToPoint(context, 20, 400); 105 /** 106 * <#Description#> 107 * 108 * @param c#> <#c#> 上下文 109 * @param cpx#> <#cpx#> 控制点的 x坐标 110 * @param cpy#> <#cpy#> 控制点的 y坐标 111 * @param x#> <#x#> 终点的 x坐标 112 * @param y#> <#y#> 终点的 y坐标 113 * 114 * @return 曲线 115 */ 116 // CGContextAddQuadCurveToPoint(context, 160, 100, 300, 400); 117 // CGContextStrokePath(context); 118 //两个控制点的 119 CGContextAddCurveToPoint(context, 160, 100, 300, 400, 100, 200); 120 CGContextStrokePath(context); 121 122 } 123 124 //5.画扇形 125 -(void)drawArc:(CGContextRef)context 126 { 127 /** 128 * <#Description#> 129 * 130 * @param c#> <#c#> 上下文 131 * @param x#> <#x#> 圆心的x坐标 132 * @param y#> <#y#> 圆心的y坐标 133 * @param radius#> <#radius#> 圆的半径 134 * @param startAngle#> <#startAngle#> 开始的角度 135 * @param endAngle#> <#endAngle#> 结束的角度 136 * @param clockwise#> <#clockwise#> 方向(默认是顺时针0,1是逆时针) 137 * 角度是按顺时针算的 138 * @return 一段弧 139 */ 140 // CGContextMoveToPoint(context, 100, 100); 141 // CGContextAddArc(context, 100, 100, 50, 0, M_PI/3, 0); 142 // //CGContextAddLineToPoint(context, 100, 100); 143 // CGContextClosePath(context); 144 // CGContextStrokePath(context); 145 // CGContextFillPath(context); 146 147 CGContextMoveToPoint(context, 150, 150); 148 CGContextAddArc(context, 150, 150,100, 0, 270*M_PI/180, 1); 149 CGContextSetFillColorWithColor(context, [UIColor orangeColor].CGColor); 150 CGContextFillPath(context); 151 152 CGContextMoveToPoint(context, 150, 150); 153 CGContextAddArc(context, 150, 150, 100, 0, 120*M_PI/180, 0); 154 CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor); 155 CGContextFillPath(context); 156 157 CGContextMoveToPoint(context, 150, 150); 158 CGContextAddArc(context, 150, 150, 100, 120*M_PI/180, 270*M_PI/180, 0); 159 CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor); 160 CGContextFillPath(context); 161 162 } 163 164 //4.画圆 165 -(void)drawCircle:(CGContextRef)context 166 { 167 CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 100)); 168 //空心渲染 169 //CGContextStrokePath(context); 170 //实心渲染 171 CGContextFillPath(context); 172 } 173 174 175 //3.画矩形 176 -(void)drawRectWithContext:(CGContextRef)context 177 { 178 CGContextAddRect(context, CGRectMake(20, 20, 100, 100)); 179 //空心 180 // CGContextStrokePath(context); 181 //实心 182 // CGContextFillPath(context); 183 //同时显示线框和填充 184 CGContextDrawPath(context, kCGPathFillStroke); 185 //以上三种渲染方式只能使用一种,如果都写了只显示先写的 186 } 187 188 189 //2.画三角形 190 -(void)drawTriangle:(CGContextRef)context 191 { 192 CGContextMoveToPoint(context, 20, 20); 193 CGContextAddLineToPoint(context, 100, 40); 194 CGContextAddLineToPoint(context, 150, 100); 195 //绘制空心的三角形 196 // CGContextAddLineToPoint(context, 20, 20); 197 CGContextClosePath(context); 198 CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor); 199 200 201 //设置实心对应的颜色 202 // CGContextSetFillColorWithColor(context, [UIColor orangeColor].CGColor); 203 //绘制实心的 204 // CGContextFillPath(context); 205 //渲染 206 CGContextStrokePath(context); 207 } 208 209 //1.画线段 210 211 -(void)drawLine:(CGContextRef)contextRef 212 { 213 //路径的设置 214 //给个起点 215 CGContextMoveToPoint(contextRef, 20, 100); 216 //给个线的终点 217 CGContextAddLineToPoint(contextRef, 200, 200); 218 219 220 //状态的设置 221 222 //设置宽度 223 CGContextSetLineWidth(contextRef, 10); 224 225 //设置颜色 226 // CGContextSetRGBStrokeColor(contextRef, 1, 0, 1, 1); 227 CGContextSetStrokeColorWithColor(contextRef, [UIColor blueColor].CGColor); 228 229 //线的风格(头尾圆角) 230 // CGContextSetLineCap(contextRef, kCGLineCapRound); 231 232 233 //画虚线 234 /** 235 * <#Description#> 236 * 237 * @param contextRef 作用域 在哪留一咕噜 238 * @param phase#> 起点的左移量 239 * @param lengths#> 规定实心和虚心的长度 240 * @param count#> 实心和虚心的循环次数(count 必须等于lengths的长度) 241 * 242 * @return 虚线 243 */ 244 245 CGFloat lengths[]= {10,10};//就是有色跟五色的长度 246 CGContextSetLineDash(contextRef, 0, lengths, 2); 247 248 249 250 //画上View来(渲染) 251 CGContextStrokePath(contextRef); 252 253 254 }