用CGContext绘图
我试图通过touchesMove:
方法画线。
以下是我的动作touchesMoved:
。
UIGraphicsBeginImageContext(self.frame.size); CGContextRef context = UIGraphicsGetCurrentContext(); // context setting CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineWidth(context, 2.0); CGContextSetRGBStrokeColor(context, 255, 0, 0, 0.5); CGContextSetBlendMode(context, kCGBlendModeNormal); // drawing CGContextMoveToPoint(context, lastPoint.x, lastPoint.y); CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y); CGContextStrokePath(context); CGContextFlush(context); self.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
touchesMoved:
被调用; 但是屏幕上没有显示任何内容。
我错过了什么?
添加
self是UIImageView的子类。
好吧,我发现它为什么不起作用。 我创build了每个触摸移动事件的CGContext
。 我移动了UIGraphicsBeginImageContext(self.frame.size);
init
方法和UIGraphicsEndImageContext();
去分配。
这是我如何绘制的代码。
static CGPoint lastPoint; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch_ = [touches anyObject]; CGPoint point_ = [touch_ locationInView:self]; lastPoint = point_; CGContextRef context = UIGraphicsGetCurrentContext(); // context setting CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineWidth(context, 2.0); CGContextSetRGBStrokeColor(context, 255, 0, 0, 0.5); CGContextSetBlendMode(context, kCGBlendModeNormal); } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { lastPoint = CGPointZero; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self]; CGContextRef context = UIGraphicsGetCurrentContext(); // drawing CGContextMoveToPoint(context, lastPoint.x, lastPoint.y); CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y); CGContextStrokePath(context); CGContextFlush(context); self.image = UIGraphicsGetImageFromCurrentImageContext(); lastPoint = currentPoint; }