我想根据他们的frame.origin.y对UIViews的NSMutableArray进行排序,我希望y的最低视图是第一个等等。可能是2个UIViews具有相同的原点。这有一个现有的方法吗?
答案 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并进行编码