我很难想出这个问题,我希望用户在一个位置点击一次,然后点击另一个位置并在点之间绘制直线,曲线或弧线。你会如何处理这个问题,我对iOS很新,而且文档没有帮助。我在视图控制器中实现了以下方法:
- (IBAction)singleTap:(UITapGestureRecognizer *)sender {
CGPoint currentPoint = [sender locationInView:self.view];
但是我很难搞清楚从这里去哪里,该怎么做。我创建了一个包含drawRect方法的UIView子类,但我不知道该怎么做,我知道drawRect方法是绘制形状,但是使用tap识别器我不知道如何实现这样的东西。
答案 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: