In this regard: Method:
-(void)touchesBegan:(NSSet* )touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; UITouch *touch = [touches anyObject]; _previousPoint1 = [touch previousLocationInView:self.main_uiview]; _previousPoint2 = [touch previousLocationInView:self.main_uiview]; _currentPoint = [touch locationInView:self.main_uiview]; [self touchesMoved:touches withEvent:event]; self.bezierPath = [UIBezierPath bezierPath]; [self.bezierPath moveToPoint:_currentPoint]; }
TouchesMove Method
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent* )event { UITouch *touch = [touches anyObject]; _previousPoint2 = _previousPoint1; _previousPoint1 = [touch previousLocationInView:self.main_uiview]; _currentPoint = [touch locationInView:self.main_uiview]; lastPoint = _currentPoint; [_bezierPath addLineToPoint:lastPoint]; // calculate mid point CGPoint mid1 = midPoint4(_previousPoint1, _previousPoint2); CGPoint mid2 = midPoint4(_currentPoint, _previousPoint1); UIGraphicsBeginImageContextWithOptions(self.bg_imageview.frame.size, NO, 0.0); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context,brush); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineJoin(context,kCGLineJoinRound); [self.bg_imageview.image drawInRect:CGRectMake(0, 0, self.bg_imageview.frame.size.width, self.bg_imageview.frame.size.height)]; CGContextMoveToPoint(context, mid1.x, mid1.y); // Use QuadCurve is the key CGContextAddQuadCurveToPoint(context, _previousPoint1.x, _previousPoint1.y, mid2.x, mid2.y); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetStrokeColorWithColor(context,[UIColor blackColor].CGColor); CGContextSetLineWidth(context, 3.0); CGContextStrokePath(context); self.bg_imageview.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();}
source share