获取线IOS相交的所有视图

时间:2013-04-17 06:03:22

标签: ios objective-c line intersection

我有一个小的(30X30大小)UIViews&我通过点击屏幕上的两个点作为起点和点,在他们上划一条线。端点使用以下代码:

CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGFloat components[] = {244.0f/255.0f, 226.0f/255.0f, 119.0f/255.0f, 0.8};
CGColorRef color = CGColorCreate(colorspace, components);
CGContextSetStrokeColorWithColor(context, color);
CGContextSetLineWidth(context, 20.0);
CGContextMoveToPoint(context, startPoint.x, startPoint.y);
CGContextAddLineToPoint(context, endPoint.x, endPoint.y);
CGContextStrokePath(context);
CGColorSpaceRelease(colorspace);
CGColorRelease(color);

在屏幕上点击两个点&绘制线条工作正常,但如何获得该线相交的所有视图? 我想在触摸结束方法中获得这些视图。

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  CGPoint pt = [[touches anyObject] locationInView:alphabetView];
  UIView *touched = [alphabetView hitTest:pt withEvent:event];
  CGPoint p = touched.center;
  // code here to get view list.
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果出现以下情况,则线段(从A点到B点)与矩形(视图框)相交:

  1. 线段与4个矩形边中的任何一个相交,
  2. A点和B点都在矩形内。
  3. 如果(1)和(2)的答案都是“否”,则线段不与...相交 矩形。

    来自this answercheckLineIntersection函数可能 有助于检查条件(1)。

    CGRectContainsPoint()可用于检查条件(2)。

答案 1 :(得分:0)

您可以使用CGContextPathContainsPoint()检查您的CGPoint是否在您的行的路径中,它返回一个布尔值。可以找到它的参考here