我在NSMutableArray中有几个UIImageViews。它们都在superView中。我想检查UIImageView是否与数组中的另一个UIImageView相交(碰撞,碰撞或触摸)。这就是我一直在做的事情,但我认为应该有更好的方法。
for (UIImageView *b in _blocks) {
for (UIImageView *b2 in _blocks) {
if (CGRectContainsPoint(b2.frame, CGPointMake(b.center.x, b.center.y + b.frame.size.height/2))) {
// Do something
}
}
}
如果我想检查图像视图是否以这种方式触摸超过2个视图,则代码将变得非常讨厌。这就是为什么我想知道更好的方法。
答案 0 :(得分:1)
使用:CGRectIntersectsRect(b2.frame, b.frame)
如下:
for (UIImageView *b in _blocks) {
for (UIImageView *b2 in _blocks) {
if (b != b2 && CGRectIntersectsRect(b2.frame, b.frame)) {
// Do something
}
}
}
答案 1 :(得分:1)
这样做:
NSMutableArray *arrIntersect = [NSMutableArray array];
for (UIImageView *b in _blocks) {
for (UIImageView *b2 in _blocks) {
if (b != b2 && CGRectIntersectsRect(b2.frame, b.frame)) {
if(arrIntersect.count > 2)
//count > 2
else
[arrIntersect addObject:b2];
}
}
}
答案 2 :(得分:0)
我认为你有正确的方法,但是你正在重复检查,所以最好检查一个循环:
NSInteger count = [_blocks count];
for (NSInteger i = 0; i < count - 1; i++)
{
for (NSInteger j = i + 1; j < count; j++)
{
UIImageView *iv1 = [_blocks objectAtIndex:i];
UIImageView *iv2 = [_blocks objectAtIndex:j];
if (CGRectIntersectsRect(iv1.frame, iv2.frame)
{
// Do something
}
}
}
考虑原始代码检查所有对象两次(例如图像视图3和5,然后循环中的5和3)。