Risposte:
UIView
i fratelli vengono raggruppati nell'ordine in cui vengono aggiunti alla loro superview. I UIView
metodi e le proprietà della gerarchia sono lì per gestire l'ordine di visualizzazione. In 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;
Le viste dei fratelli vengono ordinate di fronte subviews
all'array. Quindi la vista più in alto sarà:
[parentView.subviews lastObject];
e la vista dal basso sarà:
[parentView.subviews objectAtIndex:0];
Come Kolin Krewinkel ha detto, [parentView bringSubviewToFront:view]
porterà la vista in alto, ma questo è solo il caso se le viste sono tutti fratelli nella gerarchia.
Puoi usare la zPosition
proprietà del livello della vista (è un CALayer
oggetto) per modificare l'indice z della vista.
theView.layer.zPosition = 1;
Come ha aggiunto Viktor Nordling , "i grandi valori sono in cima. Puoi usare tutti i valori che desideri, compresi i valori negativi". Il valore predefinito è 0.
È necessario importare il framework QuartzCore per accedere al layer. Aggiungi questa riga di codice nella parte superiore del file di implementazione.
#import "QuartzCore/QuartzCore.h"
zPosition
funzionare le opere?
IB e Swift
Dato il layout scorrevole in cui il giallo è la superview e rosso, verde e blu sono le sottovoci di giallo del fratello,
l'obiettivo è spostare una sottoview (diciamo verde) in alto.
In Interface Builder è sufficiente trascinare la vista che si desidera visualizzare nella parte superiore in fondo all'elenco nella Struttura dei documenti.
In alternativa, è possibile selezionare la vista e quindi nel menu andare su Editor> Disponi> Invia in primo piano .
Esistono un paio di modi diversi per farlo a livello di codice.
Metodo 1
yellowView.bringSubviewToFront(greenView)
Questo metodo è l'equivalente programmatico della risposta IB sopra.
Funziona solo se le visualizzazioni secondarie sono fratelli l'una dell'altra.
Un array di sottoview è contenuto in yellowView.subviews
. Qui, bringSubviewToFront
sposta l' greenView
indice 0
in 2
. Questo può essere osservato con
print(yellowView.subviews.indexOf(greenView))
Metodo 2
greenView.layer.zPosition = 1
0
per tutte le altre viste, il risultato è che greenView
sembra in cima. Tuttavia, rimane ancora all'indice 0
della yellowView.subviews
matrice. Ciò può causare alcuni risultati imprevisti, tuttavia, perché cose come gli eventi di tocco passeranno comunque alla vista con il numero di indice più alto. Per questo motivo, potrebbe essere meglio seguire il metodo 1 sopra.zPosition
potrebbe essere impostato CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
nelle vecchie versioni di Swift) per assicurarsi che sia in cima.[parentView bringSubviewToFront:view] ;
Nella vista che vuoi portare in cima ... (in breve tempo)
superview?.bringSubviewToFront(self)
Se stai usando cocos2d, potresti riscontrare un problema con [parentView bringSubviewToFront: view], almeno non funzionava per me. Invece di portare la vista che volevo in primo piano, rimando indietro le altre viste e questo ha funzionato.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Possiamo usare zPosition in iOS
se abbiamo una vista chiamata salonDetailView
es:@IBOutlet weak var salonDetailView: UIView!
e avere UIView per GMSMapView
ad esempio:@IBOutlet weak var mapViewUI: GMSMapView!
Per mostrare la vista saloneDetailVedere la parte superiore della mapViewUI
usa zPosition come di seguito
salonDetailView.layer.zPosition = 1