2010-10-06 2 views
1

Ma classe a une logique pour insérer des vues dans certains niveaux de la hiérarchie. Plus bas sur la ligne, il les retourne de sorte que la vue de l'ombre soit en dessous de la vue de contenu au lieu de la voir au-dessus.Obtenir par programme la position "Z" d'un UIView par rapport à ses frères et soeurs

// "Flipping" their positions. 
[containerView insertSubview:contentView aboveSubview:shadowView]; 

UIView a une propriété subviews retourner un NSArray, malheureusement, le tableau ne reflète pas le point de vue commande de la pile.

Je souhaite tester l'emplacement de la vue par rapport à ses frères et soeurs. Comment puis-je faire cela?

Voici un exemple de test.

- (void)testViewHierarchyFlipping { 
    STAssertEquals(containerView, shadowView.superview, nil); 
    STAssertEquals(containerView, contentView.superview, nil); 
    // Test that shadowView is ABOVE contentView. 
} 

Répondre

1

Vous pouvez inspecter la propriété containerView.subviews pour déterminer la position Z de chaque sous-vue.

Les éléments au début de la matrice sont plus profonds que les éléments situés à la fin de la matrice.

Je crois que cela devrait fonctionner pour votre test, bien que je n'ai pas accès à Xcode pour vérifier qu'il est correct pour le moment.

- (void)testViewHierarchyFlipping { 
    STAssertEquals(containerView, shadowView.superview, nil); 
    STAssertEquals(containerView, contentView.superview, nil); 

    // Test that shadowView is ABOVE contentView. 
    UIView *topView = (UIView *)[[containerView subviews] lastObject]; 
    UIView *bottomView = (UIView *)[[containerView subviews] objectAtIndex:0]; 
    STAssertEquals(shadowView, topView, nil); 
    STAssertEquals(contentView, bottomView, nil); 
} 
Questions connexes