Arrays 将CGRectIntersectsRect与UIView数组的IBMoutletCollection一起使用

Arrays 将CGRectIntersectsRect与UIView数组的IBMoutletCollection一起使用,arrays,uiview,for-loop,cgrect,iboutletcollection,Arrays,Uiview,For Loop,Cgrect,Iboutletcollection,您好,我有3个视图作为iOutletCollection的一部分。它们位于名为MyArrayOfView的数组中。我希望能够使用CGRectIntersectsRect来确定这3个视图中的任何一个何时重叠,但到目前为止运气不佳。我想我可以在数组中循环两次,然后运行CGRectIntersectsRect,但运气不好。我错过了什么。提前谢谢 for (UIView *view1 in self.myArrayOfViews) { NSLog(@"view1 is %@",view1);

您好,我有3个视图作为iOutletCollection的一部分。它们位于名为MyArrayOfView的数组中。我希望能够使用CGRectIntersectsRect来确定这3个视图中的任何一个何时重叠,但到目前为止运气不佳。我想我可以在数组中循环两次,然后运行CGRectIntersectsRect,但运气不好。我错过了什么。提前谢谢

for (UIView *view1 in self.myArrayOfViews) {
    NSLog(@"view1 is %@",view1);
    for (UIView *view2 in self.myArrayOfViews) {
        NSLog(@"view2 is %@",view2);

        if( CGRectIntersectsRect(view1.frame, view2.frame)) {
            NSLog(@"overlap!");
        }
    }

}

你知道问题出在哪里了。以下是如何添加检查以确保两个视图不相同:

for (UIView *view1 in self.myArrayOfViews) {
    for (UIView *view2 in self.myArrayOfViews) {    
        if (view1 != view2 && CGRectIntersectsRect(view1.frame, view2.frame)) {
            NSLog(@"overlap!");
        }
    }    
}

运行此代码时会发生什么情况?你期望发生什么?它总是认为它是重叠的。循环运行时,我需要更好地指定我要记录的内容b/c每行有大量数据。是否正在将自身与自身进行比较?是的,当我查看输出时,当视图在两个循环中与自身对齐时,它会触发重叠消息。感谢您的帮助,但还有一件事。如果我坚持一条else语句并为此运行另一个NSLog,那么当与一个视图重叠时,if和else都会发生。所有视图都发生了这种情况,直到我卡住了,else if(view1!=view2)在那里。给定相同的一对视图,不可能同时运行
if
else
块中的代码,所以我不确定您到底在说什么。如果您告诉我们
值是什么,这会有所帮助。此外,视图是否都是同级视图(它们是否都具有相同的
superview
)?