如何在iOS中用线连接两个按钮(点)?

时间:2013-05-13 06:54:29

标签: iphone ios uibutton uigesturerecognizer uitouch

我想制作一个项目,我必须触摸一个点并将其连接到另一个点并将其连接到另一个点。当我将一个点与另一个点连接时,它们之间会产生一条线。

实际上当我点击/触摸一个点时,该线将显示,当我触摸第二个点时,该线将在两个点之间产生。

我还没能做到这一点,我正在尝试并在网上搜索但尚未找到解决方案。

这是我的需要像https://play.google.com/store/apps/details?id=zok.android.dots&hl=en

这样

我认为这是由UIGesture Recogniser完成的?或者这是别的吗?我怎么能做到这一点?

非常欢迎来自专家的任何想法或建议。

4 个答案:

答案 0 :(得分:3)

根据您的要求修改此代码

CGContextRef context = UIGraphicsGetCurrentContext();
UIColor *currentColor = [UIColor blackColor];
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextSetLineWidth(context, 2.0);
CGContextBeginPath(context);
CGContextMoveToPoint(context, touchStart.x, touchStart.y);
CGContextAddLineToPoint(context, touchEnd.x, touchEnd.y);
CGContextStrokePath(context);

@Nisha:

制作CGPoint touchStarttouchEnd的gloabal实例并将其设为:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
touchEnd = CGPointZero;
touchStart = CGPointZero;
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
NSLog(@"start point >> %@",NSStringFromCGPoint(point));
    touchStart = point;
}

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self];
    touchEnd = point; 
    [self setNeedsDisplay];

}

答案 1 :(得分:1)

您可以借助CGPoint方法将触摸的位置存储在两个不同的touchedEnded中。

然后,当你有两个点时,你可以添加一个新的UIView作为子视图,它知道这两个CGPoint并将在其drawRect方法中绘制一条线。或者在当前视图中执行,方法是调用[view setNeedsDisplay]来触发自己的drawRect方法。

查看此link

答案 2 :(得分:1)

尝试以下步骤。

创建UIView的一个子类。在上面添加你的UIButtons。

实施Touches delgates,如touchesBegan,move,end。

Inside touchesBegan检查touch isinsideview:myButton1然后将标志设为true。

编辑:

UITouch *touch = [[UITouch alloc] init];
touch = [touches anyObject];
CGPoint point = [touch locationInView:self];

if(CGRectContainsPoint(myButton1.frame, point))
    NSLog(@"Inside myButton1");

测试子视图是否被触摸点击的另一种方式

CGPoint pt = [[touches anyObject] locationInView:self.view];
UIView *touchedView = [self.view hitTest:pt withEvent:event];

内部触摸移动检查标志是否为true而drawline()...并继续检查内部视图中是否有触摸:myButton2。 call setNeedsDisplay。

现在,您将获得在UIView中绘制线条的方法和示例代码。只需应用上述逻辑。

答案 3 :(得分:1)

如果可以,请使用UI触摸方法获取两个按钮的坐标。您可以借助CGPoint方法在两个不同的touchedEnded中找到触摸的位置。要查找触摸位置文档here

在您的视图中获取UIButtons的位置后,您可以使用此方法绘制之间的线 -

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor]CGColor]);
    CGContextSetLineWidth(context, 1.0);
    CGContextMoveToPoint(context, startPoint.x, startPoint.y);
    CGContextAddLineToPoint(context, endPoint.x, endPoint.y);
    CGContextStrokePath(context);
    CGContextRestoreGState(context); 
}

希望这有帮助