如何使用UIBezierPath绘制触摸事件之后的一行?
我从类似的问题中挑选了下面的代码片段,但是我没有任何运气让它工作。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Check #1"); UITouch* touch = [touches anyObject]; self.currentPath = [UIBezierPath bezierPath]; currentPath.lineWidth = 3.0; [currentPath moveToPoint:[touch locationInView:self.view]]; [paths addObject:self.currentPath]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; [self.currentPath addLineToPoint:[touch locationInView:self.view]]; [self.view setNeedsDisplay]; } - (void)drawRect:(CGRect)rect { [[UIColor redColor] set]; for (UIBezierPath *path in paths) { NSLog(@"Check #2?"); [path stroke]; } }
我从中得到的是,我需要使用UIBezierPath
但我不知道如何让它跟随我的手指。 我只想绘制一条线,当用户触摸并结束他们拿起他们的手指时开始。
我怎样才能使用UIBezierPath来实现这个画线?
#import <UIKit/UIKit.h> @interface Canvas : UIImageView @property (nonatomic, assign) CGPoint location; @end #import "Canvas.h" @implementation Canvas - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; self.location = [touch locationInView:self]; } - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint currentLocation = [touch locationInView:self]; UIGraphicsBeginImageContext(self.frame.size); CGContextRef ctx = UIGraphicsGetCurrentContext(); [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; CGContextSetLineCap(ctx, kCGLineCapRound); CGContextSetLineWidth(ctx, 5.0); CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, self.location.x, self.location.y); CGContextAddLineToPoint(ctx, currentLocation.x, currentLocation.y); CGContextStrokePath(ctx); self.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); self.location = currentLocation; } - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint currentLocation = [touch locationInView:self]; UIGraphicsBeginImageContext(self.frame.size); CGContextRef ctx = UIGraphicsGetCurrentContext(); [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; CGContextSetLineCap(ctx, kCGLineCapRound); CGContextSetLineWidth(ctx, 5.0); CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, self.location.x, self.location.y); CGContextAddLineToPoint(ctx, currentLocation.x, currentLocation.y); CGContextStrokePath(ctx); self.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); self.location = currentLocation; } @end