2013-03-08 73 views
1

绘制两点之间的直线我有我的UIView两个方形的图像。一旦我将手指从一个图像拖到另一个图像上,我想在它们之间绘制一条直线。通过拖动IOS

我处理了touchesMoved方法来检查我的touchLocation何时到达任一图像的框架。所以我在开始绘制和两个点之间处理逻辑部分。

我只是无法弄清楚如何,使用(void)drawRect:(CGRect)rect做。首先,我在drawRect中添加了一个NSlog,并且我编写了代码在两行之间绘制一条线,即使这没有发生。

我检查这个question too,但我想继续拖累和绘制多个点之间的线路。

- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"Draw Rect Entered"); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor]CGColor]); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, 20, 20); 
    CGContextStrokePath(context); 
} 
+0

是'-drawRect:'绝对被称为 - 你叫'地方-setNeedsDisplay'? 。 – 2013-03-08 14:25:14

+0

drawRect中没有得到called..no我“米不是要求-setneedsDisplay我在哪里都叫它 – 2013-03-08 14:26:51

回答

0

为了更新你需要调用-setNeedsDisplay-setNeedsDisplayInRect:上需要重新绘制的视图的视图。一旦确定需要画线,您应该在触摸处理程序中执行此操作。这将触发视图上的-drawRect:方法 - 您不直接调用-drawRect。欲了解更多信息,请阅读UIView docs。我不知道你是否希望你的线永久存在,一旦created-如果有可能被删除的可能性,我想通过一个布尔值确定是否划清界线或不添加if语句-drawRect:控制。然后,如果有必要,您可以轻松将其关闭。

根据您的评论,我会创建一个ivar数组,用于存储当前跟踪线的点,然后在-drawRect:中循环使用它们,使用Core图形函数一次绘制线段。这样,每个重绘都会绘制新的细分和以前的所有细分。由于CGPoint不是OBJ-C的对象,你要么必须创建一个包装类或使用OBJ-C++和std::vector。你也可以使用一个固定大小的C数组(你提到你有10个点) - 在这种情况下,你必须将未使用的坐标预设为一些被定义为无效的任意值(例如-500,-500)并添加如果遇到这些值,则不绘制线段的逻辑。

小点 - 我不会硬编码线坐标 - 相反,你可以从图像中frame财产得到他们。这样,如果您更改图像或调整其大小,您的代码将更具可读性并且不会中断。

+0

的情况是:我是上的任何视图10个中给出点之间拖动一旦两个点连接的线他们之间绘制。一旦拖动操作继续到另一点,则该行继续这条线之间。有点像在Android手机上的锁屏。 – 2013-03-08 14:41:15

+0

确定。因此,点不'UIImages'或'UIView'小号 – 2013-03-08 14:42:22

+0

的点是UIImages。我在viewDidLoad中添加了'[self.view setNeedsDisplay]'。drawRect仍然没有被调用。 – 2013-03-08 14:45:44

0

有两个问题我遇到了,可能会导致这个问题:
1)确保您的主线程
2)调用setNeedsDisplay如果您正在使用多个视图的工作确保您所呼叫setNeedsDisplay反对正确的。
这是很容易与一个视图工作,忘记调用setNeedsDisplay对父视图。