有没有办法在 UIViews 的 NSArray 中找到边缘。
例如,下图显示了一组 UIView(1 到 7)。每个视图都与另一个视图相邻。所以视图 1 可能是 (0,0,70,20),视图 6 是 (70,0,30,50)。
我将如何返回作为视图之间分隔符的行数组。在下面的示例中,将有 6 个分隔符(内部行)。
---------------------
| 1 | 6 |
| | |
-------------| |
| 2 | 3 | |
| |-----| |
| | 4 |------|
-------------| |
| 5 | 7 |
---------------------
我的第一次尝试获取每个正方形的内部线(不在容器视图外部的线),删除重复项(即 3 到 4 之间的那些),
..然后删除与边缘上的其他线接触的线,直到剩下一条。不幸的是,这删除了最右边的垂直线。
我最后一部分的代码:
NSMutableArray *sidesToDiscard = [[NSMutableArray alloc] init];
for (NSValue *rect1 in self.sides)
{
for (NSValue *rect2 in self.sides)
{
if ([rect1 isEqualToValue:rect2])
{
} else
{
BOOL xIsSame = (rect2.CGRectValue.origin.x == rect1.CGRectValue.origin.x);
BOOL bothAreVertical = (rect2.CGRectValue.size.width == 0 && rect1.CGRectValue.size.width == 0);
BOOL areTouchingOnVertical = ((rect1.CGRectValue.origin.y + rect1.CGRectValue.size.height == rect2.CGRectValue.origin.y) || (rect1.CGRectValue.origin.y == rect1.CGRectValue.origin.y + rect2.CGRectValue.size.height));
BOOL yIsSame = (rect2.CGRectValue.origin.y == rect1.CGRectValue.origin.y);
BOOL bothAreHorizontal = (rect2.CGRectValue.size.height == 0 && rect1.CGRectValue.size.height == 0);
BOOL areTouchingOnHorizontal = ((rect1.CGRectValue.origin.x + rect1.CGRectValue.size.width == rect2.CGRectValue.origin.x) || (rect1.CGRectValue.origin.x == rect2.CGRectValue.origin.x + rect2.CGRectValue.size.width));
if (((xIsSame && bothAreVertical) && areTouchingOnVertical) || ((yIsSame && bothAreHorizontal) && areTouchingOnHorizontal))
{
// if are touching then remove, leaving one left...
[sidesToDiscard addObject:rect1];
[sidesToDiscard addObject:rect2];
}
}
}
}
[self.sides removeObjectsInArray:sidesToDiscard];