使用UITapGestureRecognizer在点之间绘制线条

时间:2014-06-04 14:56:52

标签: ios objective-c core-graphics ios7.1

我很难想出这个问题,我希望用户在一个位置点击一次,然后点击另一个位置并在点之间绘制直线,曲线或弧线。你会如何处理这个问题,我对iOS很新,而且文档没有帮助。我在视图控制器中实现了以下方法:

- (IBAction)singleTap:(UITapGestureRecognizer *)sender {
    CGPoint currentPoint = [sender locationInView:self.view];

但是我很难搞清楚从这里去哪里,该怎么做。我创建了一个包含drawRect方法的UIView子类,但我不知道该怎么做,我知道drawRect方法是绘制形状,但是使用tap识别器我不知道如何实现这样的东西。

1 个答案:

答案 0 :(得分:0)

首先,在将要绘制的视图中,您需要创建两个属性:

@property CGPoint firstPoint;
@property CGPoint secondPoint;

此外,您必须创建drawRect:方法。该示例在两点之间划了一条线:

- (void)drawRect:(CGRect)rect{ 
    // Color Declarations
    UIColor *lineColor = [UIColor colorForString:@"appBlack"];
    // Line between the two touches in screen
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:firstPoint];
    [path addLineToPoint:secondPoint];
    //Sets line width and color
    [lineColor setStroke];
    [path setLineWidth:1.];
    //Draws the line
    [path stroke];
}

这是一个非常基本的实现,你应该检查是否定义了firstPoint和secondPoint来实际执行绘图。

最后,当用户点按屏幕时,应用程序会调用

- (IBAction)singleTap:(UITapGestureRecognizer *)sender

您将点设置为您的视图,然后如果是第二次,请重新绘制视图。

我假设您正在绘制ViewController属性的视图:

 @property UIView myView;

您定义了singleTap:方法:

- (IBAction)singleTap:(UITapGestureRecognizer *)sender{
    CGPoint currentPoint = [sender locationInView:self.view];
    if(first_time_called){
        self.myView.firstPoint = currentPoint;
    }
    else{
        self.myView.secondPoint = currentPoint;
        [self.myView setNeedsDisplay]; //forces the repainting of the view
    }
}

考虑到您必须创建条件:first_time_called。

此外,您必须注意,如果myView和ViewController的view属性没有相同的框架,则必须使用以下内容将该点转换为myView:

convertPoint:fromView: