2012-12-14 33 views

回答

15

NSMutableArray有几个排序方式获取子视图的阵列。选择其中一个,实现排序选择器,块或功能并比较y值。下面是使用块的例子:

NSComparator comparatorBlock = ^(UIView *obj1, UIView *obj2) { 
    if (obj1.frame.origin.y > obj2.frame.origin.y) { 
     return (NSComparisonResult)NSOrderedDescending; 
    } 

    if (obj1.frame.origin.y < obj2.frame.origin.y) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } 
    return (NSComparisonResult)NSOrderedSame; 
}; 

[array sortUsingComparator:comparatorBlock]; 
+1

像一个风情万种!感谢男人:)不知道这一点,它是如此的美好! – xGoPox

+0

谢谢!这真的很有帮助。 –

+0

非常有帮助!非常感谢 –

-2

您可以使用

yourView.subviews 

那么你可以通过每个迭代并检查每个frame.origin.y,做你的编码

3

虽然这不是frame.origin.y,您还可以通过使用SortDescriptor来看,在layer.position.y为重点做到这一点。

[array sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"layer.position.y" ascending:YES]]]; 
+0

比答案更好的解决方案..你可以在'frame'上排序,因为它是一个struct – RyanG

1

你这是怎么会在斯威夫特做到这一点:

listOfViews.sortInPlace { CGRectGetMinY($0.frame) < CGRectGetMinY($1.frame) } 

这就是所有:-)我所有的爱给斯威夫特:-)

相关问题