我想根据它们的 frame.origin.y 对 UIViews 的 NSMutableArray 进行排序,我希望以 y 为第一的最低视图等。这可能是 2 个 UIViews 具有相同来源的情况。有没有现成的方法呢?
问问题
1460 次
4 回答
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];
于 2012-12-14T16:58:06.637 回答
6
虽然这不是 frame.origin.y,但您也可以通过使用 SortDescriptor 并将 layer.position.y 作为键来执行此操作。
[array sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"layer.position.y" ascending:YES]]];
于 2014-06-07T06:16:24.943 回答
1
这就是你在 Swift 中的做法:
listOfViews.sortInPlace { CGRectGetMinY($0.frame) < CGRectGetMinY($1.frame) }
就是这样 :-) 我对 Swift 的爱 :-)
于 2016-03-08T10:27:53.393 回答
-2
您可以使用获取子视图数组
yourView.subviews
然后您可以遍历每个并检查每个 frame.origin.y 并进行编码
于 2012-12-14T16:52:40.577 回答