一、qurza2d是怎么將繪圖信息和繪圖的屬性繪制到圖形上下文中去的?
說明:
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 //第一條線 7 CGContextMoveToPoint(ctx, 20, 100); 8 CGContextAddLineToPoint(ctx, 100, 320); 9 10 //第二條線11 CGContextMoveToPoint(ctx, 40, 200);12 CGContextAddLineToPoint(ctx, 80, 100);13 //渲染14 CGContextStrokePath(ctx);15 16 }
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 //第一條線 7 CGContextMoveToPoint(ctx, 20, 100); 8 CGContextAddLineToPoint(ctx, 100, 320); 9 10 //設置第一條線的狀態11 //設置線條的寬度12 CGContextSetLineWidth(ctx, 12);13 //設置線條的顏色14 [[UIColor brownColor]set];15 //設置線條兩端的樣式為圓角16 CGContextSetLineCap(ctx,kCGLineCaPRound);17 //對線條進行渲染18 CGContextStrokePath(ctx);19 20 //第二條線21 CGContextMoveToPoint(ctx, 40, 200);22 CGContextAddLineToPoint(ctx, 80, 100);23 //渲染24 CGContextStrokePath(ctx);25 26 }
效果圖:
新的需求:要讓兩條線的顏色不一樣,要求第二條線變成原版的樣子。要達到上面的要求,有以下幾種做法:
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 //第一條線 7 CGContextMoveToPoint(ctx, 20, 100); 8 CGContextAddLineToPoint(ctx, 100, 320); 9 10 //設置第一條線的狀態11 //設置線條的寬度12 CGContextSetLineWidth(ctx, 12);13 //設置線條的顏色14 [[UIColor brownColor]set];15 //設置線條兩端的樣式為圓角16 CGContextSetLineCap(ctx,kCGLineCapRound);17 //對線條進行渲染18 CGContextStrokePath(ctx);19 20 //第二條線21 CGContextMoveToPoint(ctx, 40, 200);22 CGContextAddLineToPoint(ctx, 80, 100);23 24 //清空狀態25 CGContextSetLineWidth(ctx, 1);26 [[UIColor blackColor]set];27 CGContextSetLineCap(ctx,kCGLineCapButt);28 29 //渲染30 CGContextStrokePath(ctx);31 32 }
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 7 //第二條線 8 CGContextMoveToPoint(ctx, 40, 200); 9 CGContextAddLineToPoint(ctx, 80, 100);10 11 //清空狀態12 // CGContextSetLineWidth(ctx, 1);13 // [[UIColor blackColor]set];14 15 // CGContextSetLineCap(ctx,kCGLineCapButt);16 17 //渲染18 CGContextStrokePath(ctx);19 20 //第一條線21 CGContextMoveToPoint(ctx, 20, 100);22 CGContextAddLineToPoint(ctx, 100, 320);23 24 //設置第一條線的狀態25 //設置線條的寬度26 CGContextSetLineWidth(ctx, 12);27 //設置線條的顏色28 [[UIColor brownColor]set];29 //設置線條兩端的樣式為圓角30 CGContextSetLineCap(ctx,kCGLineCapRound);31 //對線條進行渲染32 CGContextStrokePath(ctx);33 }
兩種方式完成的效果相同:
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 //第一條線 7 CGContextMoveToPoint(ctx, 20, 100); 8 CGContextAddLineToPoint(ctx, 100, 320); 9 10 //設置第一條線的狀態11 //設置線條的寬度12 CGContextSetLineWidth(ctx, 12);13 //設置線條的顏色14 [[UIColor brownColor]set];15 //設置線條兩端的樣式為圓角16 CGContextSetLineCap(ctx,kCGLineCapRound);17 //對線條進行渲染18 CGContextStrokePath(ctx);19 20 //第二條線21 CGContextMoveToPoint(ctx, 40, 200);22 CGContextAddLineToPoint(ctx, 80, 100);23 //渲染24 CGContextStrokePath(ctx);25 }
1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //繪圖 6 //第一條線 7 CGContextMoveToPoint(ctx, 20, 100); 8 CGContextAddLineToPoint(ctx, 100, 320); 9 10 //設置第一條線的狀態11 //設置線條的寬度12 CGContextSetLineWidth(ctx, 12);13 //設置線條的顏色14 [[UIColor brownColor]set];15 //設置線條兩端的樣式為圓角16 CGContextSetLineCap(ctx,kCGLineCapRound);17 //對線條進行渲染18 CGContextStrokePath(ctx);19 20 //第二條線21 CGContextMoveToPoint(ctx, 40, 200);22 CGContextAddLineToPoint(ctx, 80, 100);23 24 //清空狀態25 CGContextSetLineWidth(ctx, 1);26 [[UIColor blackColor]set];27 CGContextSetLineCap(ctx,kCGLineCapButt);28 29 //渲染30 CGContextStrokePath(ctx);31 }
CGContextSaveGState(ctx);
方法,把當前獲取的上下文拷貝一份,保存一份最純潔的圖形上下文。1 - (void)drawRect:(CGRect)rect 2 { 3 //獲取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //保存一份最初的圖形上下文 6 CGContextSaveGState(ctx); 7 8 //繪圖 9 //第一條線10 CGContextMoveToPoint(ctx, 20, 100);11 CGContextAddLineToPoint(ctx, 100, 320);12 13 //設置第一條線的狀態14 //設置線條的寬度15 CGContextSetLineWidth(ctx, 12);16 //設置線條的顏色17 [[UIColor brownColor]set];18 //設置線條兩端的樣式為圓角19 CGContextSetLineCap(ctx,kCGLineCapRound);20 //對線條進行渲染21 CGContextStrokePath(ctx);22 23 //還原開始的時候保存的那份最純潔的圖形上下文24 CGContextRestoreGState(ctx);25 //第二條線26 CGContextMoveToPoint(ctx, 40, 200);27 CGContextAddLineToPoint(ctx, 80, 100);28 29 //清空狀態30 // CGContextSetLineWidth(ctx, 1);31 // [[UIColor blackColor]set];32 // CGContextSetLineCap(ctx,kCGLineCapButt);33 34 //渲染35 CGContextStrokePath(ctx);36 }
新聞熱點
疑難解答