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

xGo*_*Pox 6 sorting objective-c uiview nsarray ios

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

Dru*_*erB 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];
Run Code Online (Sandbox Code Playgroud)


Luk*_*uke 5

虽然这不是 frame.origin.y,但您也可以通过使用 SortDescriptor 并将 layer.position.y 作为关键来实现。

[array sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"layer.position.y" ascending:YES]]];
Run Code Online (Sandbox Code Playgroud)