2012-12-14 35 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) } 

這就是所有:-)我所有的愛給斯威夫特:-)

相關問題