根据他们的frame.origin.y对UIView的NSMutableArray进行排序

时间:2012-12-14 16:50:11

标签: objective-c ios uiview nsarray sorting

我想根据他们的frame.origin.y对UIViews的NSMutableArray进行排序,我希望y的最低视图是第一个等等。可能是2个UIViews具有相同的原点。这有一个现有的方法吗?

4 个答案:

答案 0 :(得分:16)

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 :(得分:4)

虽然这不是frame.origin.y,但您也可以使用SortDescriptor并将layer.position.y视为关键字来完成此操作。

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

答案 2 :(得分:1)

这就是你在Swift中的表现:

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

多数人:-)所有我对Swift的爱: - )

答案 3 :(得分:-2)

您可以使用

获取子视图数组
yourView.subviews

然后您可以遍历每个并检查每个frame.origin.y并进行编码