好吧。我是objective-c的新手,我正在尝试检测两个重叠的视图。我最初使用过CGRectContainsRect
(效果很好),但注意到即使视图几乎没有重叠,这也是正确的。但是,由于视图很小,我只希望在它们严重重叠的情况下条件为真。所以,我尝试CGRectContainsPoint
改用,我检查的点是第二个视图的中心。
进行此更改给我带来了一些问题。这是我的整个 if 语句(尽管我已将问题隔离到该CGRectContainsPoint
部分:
NSDictionary *dictInQ = masterDict[n];
UIView *overlapV = dictInQ[@"view"];
NSNumber *overlapB = dictInQ[@"hiddenBool"];
//if it's not itself and they intersect and they are in the same column and both views are not hidden
if (overlapV != colorV && CGRectContainsPoint([overlapV frame], CGPointMake(colorV.center.x, colorV.center.y)) && startLocation == overlapV.frame.origin.x && [colorB intValue]!=1 && [overlapB intValue]!=1)
最初当我使用时CGRectContainsRect
,[overlapV frame]
现在[colorV frame].
我正在尝试使用overlapV
视图并检查它是否包含colorV.
我尝试替换CGPointMake(colorV.center.x, colorV.center.y)
无济于事colorV.center
的视图中心,并且我已经阅读了有关 CGRectContainsPoint 和 CGPointMake 的文档并检查了类似的问题。
真正让我感到困惑的是,这个 if 语句行没有显示错误。它编译得很好,当 CGRectContainsPoint 应该从模拟器评估为 true 时,Xcode 的错误指向 if 语句中执行的第一行(尽管这一行也不是导致问题的原因;我尝试将其注释掉,它只是引发了而是在下一行出错)。关于可能导致这种情况的任何想法?
更新:这里是视图的屏幕截图,当重叠程度足以导致 CGRectContainsPoint 正确评估为 true 时(问题是它也会导致后续行出现错误)。
更新:为了澄清,断点总是发生在CGRectContainsPoint
通过后调用的任何行上(无论我将行更改为什么)。例如,在我最近的测试中,断点突出显示的行NSLog(@"start");
并说Thread 1: breakpoint 2.1,
但没有输出像典型的错误消息一样打印到控制台。
大更新:现在令我惊讶的是,将 CGRectContainsPoint 更改回原来的工作,CGRectContainsRece([overlapV frame], [colorV frame])
现在不起作用。True
但是,不同之处在于程序在评估为;时不会中断。它只是继续运行,就像永远不应该调用的 if 语句一样。