我正在自定义UIView
中创建多个自定义UIView's
。自定义子视图的创建是可以的。他们是这样的:多个UIView的重叠
Draw方法非常简单:
[[UIColor brownColor] set];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx,
5.0f);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 0.0f, 0.0f);
CGContextAddLineToPoint(ctx, 100.0f, 0.0);
CGContextAddLineToPoint(ctx, 130.0f, 25.0f);
CGContextAddLineToPoint(ctx, 100.0f, 50.0f);
CGContextAddLineToPoint(ctx, 0.0f, 50.0f);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
[super drawRect:rect];
它添加到超级视图也非常简单:
ITContextFigure *view = [[ITContextFigure alloc] initWithFrame:CGRectMake(location.x, location.y, 135.0f, 50.0f)];
[view setBackgroundColor:[UIColor yellowColor]];
[self addSubview:view];
所以我的问题是:
1)Ho我可以检测到一个与另一个重叠吗?
我看到这个解决方案:
if (CGRectContainsRect([myImageView1 frame], [myImageView2 frame])) {
NSLog(@"Overlaped, it's working!");
}
但是,如果我有多个UIViews
,做对super view
一个for
和检查每一个单个子视图似乎并没有很好的解决方案给我。
2)在这种情况下,可以做些什么?
我的主要目标是检测当这种情况发生:
更新1.0
打算尝试什么已经显示为here,因为没有更优雅的方式。如果我能够实现它,我会在Github上发布代码,如果有人需要的话。
我想你可能想要搜索算法来检测相交多边形(这涉及每对线段和线段相交的蛮力)。 – nhahtdh 2012-07-13 15:12:13
我猜你在2)的情况是边界矩形重叠,但视图的主要内容不? – 2012-07-13 15:12:25
@nhahtdh不总是一个蛮力,你可以做分离轴定理检测任意(凸)多边形上的交点 – 2012-07-13 15:13:16