Je souhaite déplacer une vue au-dessus d'une autre, comment puis-je connaître l'index z de la vue et comment passer au sommet?
UIView
les frères et sœurs sont empilés dans l'ordre dans lequel ils sont ajoutés à leur vue d'ensemble. Les UIView
méthodes et propriétés de hiérarchie sont là pour gérer l'ordre des vues. Dans UIView.h:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
Les vues frères sont ordonnées de l'arrière vers l'avant dans le subviews
tableau. La vue la plus haute sera donc:
[parentView.subviews lastObject];
et la vue de dessous sera:
[parentView.subviews objectAtIndex:0];
Comme l'a dit Kolin Krewinkel, [parentView bringSubviewToFront:view]
cela amènera la vue au sommet, mais ce n'est le cas que si les vues sont toutes des frères et sœurs de la hiérarchie.
Vous pouvez utiliser la zPosition
propriété du calque de la vue (c'est un CALayer
objet) pour modifier le z-index de la vue.
theView.layer.zPosition = 1;
Comme l'a ajouté Viktor Nordling , "les grandes valeurs sont au top. Vous pouvez utiliser toutes les valeurs que vous voulez, y compris les valeurs négatives." La valeur par défaut est 0.
Vous devez importer le framework QuartzCore pour accéder au calque. Ajoutez simplement cette ligne de code en haut de votre fichier d'implémentation.
#import "QuartzCore/QuartzCore.h"
zPosition
œuvres fonctionnent?IB et Swift
Étant donné la disposition fluide où le jaune est la vue d'ensemble et le rouge, le vert et le bleu sont des sous-vues frères du jaune,
l'objectif est de déplacer une sous-vue (disons verte) vers le haut.
Dans Interface Builder
Dans l'Interface Builder, il vous suffit de faire glisser la vue que vous souhaitez afficher du haut vers le bas de la liste dans le plan des documents.
Vous pouvez également sélectionner la vue, puis dans le menu, accédez à Editeur> Réorganiser> Envoyer au premier plan .
Dans Swift
Il existe plusieurs façons de procéder par programmation.
Méthode 1
Cette méthode est l'équivalent programmatique de la réponse IB ci-dessus.
Cela ne fonctionne que si les sous-vues sont des frères et sœurs les uns des autres.
Un tableau des sous-vues est contenu dans
yellowView.subviews
. Ici,bringSubviewToFront
déplace l'greenView
index de0
vers2
. Cela peut être observé avecMéthode 2
0
pour toutes les autres vues, le résultat est que l'greenView
apparence est en haut. Cependant, il reste toujours à l'index0
duyellowView.subviews
tableau. Cependant, cela peut entraîner des résultats inattendus, car des éléments tels que les événements tap iront toujours en premier à la vue avec le numéro d'index le plus élevé. Pour cette raison, il pourrait être préférable d'utiliser la méthode 1 ci-dessus.zPosition
pourrait être défini surCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
dans les anciennes versions de Swift) pour s'assurer qu'il est au top.la source
la source
Si vous souhaitez le faire via Interface Builder de XCode, vous pouvez utiliser les options de menu sous Editeur-> Arrangement. Vous y trouverez "Envoyer vers l'avant", "Envoyer vers l'arrière", etc.
la source
Dans la vue que vous souhaitez mettre en haut ... (en rapide)
la source
Si vous utilisez cocos2d, vous pouvez voir un problème avec [parentView bringSubviewToFront: view], au moins cela ne fonctionnait pas pour moi. Au lieu de mettre la vue que je voulais au premier plan, je renvoie les autres vues et cela a fait l'affaire.
la source
Nous pouvons utiliser zPosition dans ios
si nous avons une vue nommée salonDetailView, par exemple:
@IBOutlet weak var salonDetailView: UIView!
Dans mon cas voir l'image
et avoir UIView pour GMSMapView, par exemple:
@IBOutlet weak var mapViewUI: GMSMapView!
Pour afficher la vue salonDetailView en haut de la carteViewUI
utilisez zPosition comme ci-dessous
la source
Ou utilisez ceci
selon ici
la source