2012-12-14 15 views

cevap

15

NSMutableArray kodlama vardır birkaç sıralama yöntemleri her yineleme ve her frame.origin.y kontrol edip yapabilir

yourView.subviews 

kullanarak subviews dizi alabilirsiniz. Bunlardan birini seçin, sıralama seçiciyi, blok veya işlevi uygulayın ve y değerlerini karşılaştırın. İşte bloklarını kullanarak bir örnek: Bu frame.origin.y olmasa da

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

İşleri! teşekkürler adam :) bunu bilmiyordu ve çok iyi! – xGoPox

+0

Teşekkürler! Bu gerçekten çok yardımcı. –

+0

Çok yardımcı! Çok teşekkürler –

3

, ayrıca bir SortDescriptor kullanarak ve anahtar olarak layer.position.y bakarak bunu yapabilirsiniz.

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

Yanıtdan çok daha iyi bir çözüm .. bir yapı olduğu için "frame" üzerinde sıralayabilirsiniz – RyanG

1

Bu Swift bunu görecektir: Swift için

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

İşte tüm :-) Sevgilerimle :-) bir charme gibi