2012-12-14 12 views

Odpowiedz

15

NSMutableArray posiada kilka metod sortowania. Wybierz jedną z nich, zaimplementuj selektor sortowania, zablokuj lub użyj funkcji i porównaj wartości y. Oto przykład przy użyciu bloków:

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

działa jak urok! dzięki człowiekowi :) nie wiedziałem o tym i jest tak dobrze! – xGoPox

+0

Dziękujemy! To naprawdę świetna pomoc. –

+0

Tak pomocne! Bardzo dziękuję –

-2

można uzyskać tablicę subviews użyciu

yourView.subviews 

następnie można wykonać iterację każdego i sprawdzić każdy frame.origin.y i robić swoje kodowanie

3

Chociaż nie jest frame.origin.y, można to zrobić także za pomocą SortDescriptor i patrząc na layer.position.y jako klucz.

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

O wiele lepsze rozwiązanie niż odpowiedź .. możesz sortować na 'klatce', ponieważ jest to struktura – RyanG

1

to w jaki sposób to zrobić w Swift:

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

To wszystko :-) Cała moja miłość do Swift :-)