在iphone中的两点之间画线?
上图显示红点,我喜欢join这些点。
我喜欢在两点之间画一条线,我在imageview中有图像,我喜欢用图像的某些部分来标记点,使用触摸事件我放置点
-(void) drawRect:(CGRect)rect { if([pointarray count]==4) { float firstpointx= [[pointarray objectAtIndex:0]floatValue]; float firstpointy= [[pointarray objectAtIndex:1]floatValue]; float secondpointx= [[pointarray objectAtIndex:2]floatValue]; float secondpointy= [[pointarray objectAtIndex:3]floatValue]; CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor); CGContextSetLineWidth(ctx, 2.0); CGContextMoveToPoint(ctx, firstpointx, firstpointy);///move to ur first dot CGContextAddLineToPoint(ctx, secondpointx, secondpointy);//add line from first dot to second dot CGContextSetLineCap(ctx, kCGLineCapRound); CGContextStrokePath(ctx); [pointarray removeAllObjects];//remove first two points from ur array so that next line is not drawn in continuous with previous line } } -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { pointarray=[[NSMutableArray alloc]init]; CGPoint curPoint = [[touches anyObject] locationInView:self.view]; [pointarray addObject:[NSNumber numberWithFloat:curPoint.x]]; [pointarray addObject:[NSNumber numberWithFloat:curPoint.y]]; NSLog(@"the point array is %@",pointarray); [self.view setNeedsDisplay]; // calls drawRectMethod } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; if ([touch tapCount] == 2) { imageView.image = nil; return; } if(!mouseSwiped) { UIGraphicsBeginImageContext(self.view.frame.size); [imageView.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); imageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } }
我把点我放在这里点如何连接这两点,有人可以帮助我!
使用下面的代码它将工作: –
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = NO; UITouch *touch = [touches anyObject]; if ([touch tapCount] == 2) { [drawImage setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"white" ofType:@"png"]]]; return; } lastPoint = [touch locationInView:self.view]; lastPoint.y -= 20; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = YES; UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self.drawImage]; currentPoint.y -= 20; NSLog(@"current Point is x: %d, y: %d",currentPoint.x,currentPoint.y); UIGraphicsBeginImageContext(self.drawImage.frame.size); [drawImage.image drawInRect:CGRectMake(0, 0, self.drawImage.frame.size.width, self.drawImage.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.5, 0.6, 1.0); CGContextBeginPath(UIGraphicsGetCurrentContext()); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lastPoint = currentPoint; }
随意问问..
创build你的UIImageView子类,添加一些允许在用户触摸上添加点的方法(将绘制在drawRect中:并放置到C数组中)和一种方法来“提交”线。 提交行将简单地通过C数组,并使用CG方法绘制它们。
你不应该在drawRect:
之外绘制drawRect:
。 检测到触摸后,您需要将这些信息存储在ivar中,并在适当的时候调用[self setNeedsDisplay]
,它将调用drawRect:
另外,如果你的目标是iOS 3.2以上,你应该考虑使用手势识别器。