Réorganisation des sous-vues UIView
Dans mon application que je suis en train d'essayer d'apporter une sous-vue vers l'avant, puis le remettre à sa couche d'origine. Le code doit être assez simple:
Pour apporter de la sous-vue vers l'avant (à l'intérieur de mon personnalisée UIView classe):
[self.superview bringSubviewToFront:self];
Facile. - Je conserver l'original de la position z dans une variable d'instance nommée, vous l'aurez deviné, zPosition
. Donc, la ligne avant -bringSubviewToFront:
est:
zPosition = [self.superview.subviews indexOfObject:self];
Donc, tout le code que j'ai utiliser pour mon sous-vue de face est:
zPosition = [self.superview.subviews indexOfObject:self];
[self.superview bringSubviewToFront:self];
Cela fonctionne comme il se doit. Le problème, c'est quand j'ai essayer de mettre la sous-vue arrière, là où il était. Je suis tout simplement faire ceci:
[self.superview exchangeSubviewAtIndex:zPosition withSubviewAtIndex:
[self.superview.subviews indexOfObject:self]];
L'aide de ce code, si j'ai deux sous-vues, c'est ce qui se passe:
Disons que j'ai vue A et B. vue Vue Un est au-dessus de la vue B. I appuyez sur view B, il s'agit de l'avant. J'appuyez sur view B nouveau (il doit retourner d'où il était), et rien ne se passe, donc il est maintenant sur la vue A. Si je maintenant, appuyez sur afficher l'Un, il s'agit de l'avant, mais quand je me tape encore une fois (donc, il devrait aller de revenir à sa position z: en dessous de la vue B), toutes ses sœurs de vues disparaître!
Personne ne voir ce qui pourrait être à l'origine de ce problème?
source d'informationauteur eric.mitchell
Vous devez vous connecter pour publier un commentaire.
exchangeSubviewAtIndex peut bien mettre la vue arrière à la bonne place, mais il sera également swap sur un autre point de vue sur le haut, qui ne sera pas ce que vous avez commencé avec. Vous devrez peut-être faire quelque chose comme cela au lieu de exchangeSubviewAtIndex :
Il n'est pas nécessaire de retirer de superview:
[self.superview insertSubview:self atIndex:zPosition];
Cette question et les réponses ont été très utile pour moi.
J'ai eu l'obligation de placer une superposition entre la viewstack les vues qui sont au-dessus et au-dessous de la superposition, et je voulais garder la dynamique.
C'est, d'un point de vue peut dire qu'il est caché ou pas.
J'ai utilisé l'algorithme suivant pour réorganiser les points de vue.
Grâce à AW101 ci-dessous pour les "Pas besoin de retirer la vue".
Voici mon algorithme:
[ Swift ]
Comme d'autres gars l'a dit, il n'est pas nécessaire de supprimer et de rajouter votre sous-vues.
Au lieu de cela, j'ai trouvé que la méthode la plus pratique est: