Ich möchte eine Ansicht über eine andere verschieben. Wie kann ich den z-Index der Ansicht ermitteln und wie kann ich nach oben wechseln?
UIView
Geschwister werden in der Reihenfolge gestapelt, in der sie zu ihrer Übersicht hinzugefügt werden. Die UIView
Hierarchiemethoden und -eigenschaften dienen zum Verwalten der Ansichtsreihenfolge. 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;
Die Geschwisteransichten sind im subviews
Array von hinten nach vorne angeordnet. Die oberste Ansicht ist also:
[parentView.subviews lastObject];
und Ansicht von unten wird sein:
[parentView.subviews objectAtIndex:0];
Wie Kolin Krewinkel sagte, [parentView bringSubviewToFront:view]
wird die Ansicht nach oben bringen, aber dies ist nur der Fall, wenn die Ansichten alle Geschwister in der Hierarchie sind.
Sie können die zPosition
Eigenschaft der Ebene der Ansicht (es ist ein CALayer
Objekt) verwenden, um den Z-Index der Ansicht zu ändern.
theView.layer.zPosition = 1;
Als Viktor Nordling fügte hinzu : „große Werte auf der linken Seite . Sie alle Werte verwenden , können Sie, auch negative Werte wollen.“ Der Standardwert ist 0.
Sie müssen das QuartzCore-Framework importieren, um auf die Ebene zugreifen zu können. Fügen Sie einfach diese Codezeile oben in Ihre Implementierungsdatei ein.
#import "QuartzCore/QuartzCore.h"
zPosition
Arbeiten ausgeführt werden können?IB und Swift
Angesichts des fließenden Layouts, in dem Gelb die Übersicht ist und Rot, Grün und Blau Geschwister-Unteransichten von Gelb sind,
Das Ziel ist es, eine Unteransicht (sagen wir grün) nach oben zu verschieben.
Im Interface Builder
Im Interface Builder müssen Sie lediglich die Ansicht, die oben angezeigt werden soll, an den unteren Rand der Liste in der Dokumentübersicht ziehen.
Alternativ können Sie die Ansicht auswählen und dann im Menü zu Editor> Anordnen> Nach vorne senden gehen .
In Swift
Es gibt verschiedene Möglichkeiten, dies programmgesteuert zu tun.
Methode 1
Diese Methode ist das programmatische Äquivalent der obigen IB-Antwort.
Es funktioniert nur, wenn die Unteransichten Geschwister voneinander sind.
Ein Array der Unteransichten ist in enthalten
yellowView.subviews
. Hier wirdbringSubviewToFront
dergreenView
von Index0
nach verschoben2
. Dies kann mit beobachtet werdenMethode 2
0
für alle anderen Ansichten gilt,greenView
sieht das Ergebnis so aus, als ob es oben liegt. Es bleibt jedoch weiterhin im Index0
desyellowView.subviews
Arrays. Dies kann jedoch zu unerwarteten Ergebnissen führen, da Dinge wie Tippereignisse immer noch zuerst in die Ansicht mit der höchsten Indexnummer gelangen. Aus diesem Grund ist es möglicherweise besser, mit Methode 1 oben fortzufahren.zPosition
könnte aufCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
in älteren Versionen von Swift) gesetzt werden, um sicherzustellen, dass es oben ist.quelle
quelle
Wenn Sie dies über den XCode Interface Builder tun möchten, können Sie die Menüoptionen unter Editor-> Arrangement verwenden. Dort finden Sie "Nach vorne senden", "Nach hinten senden" usw.
quelle
Innerhalb der Ansicht möchten Sie nach oben bringen ... (in schnell)
quelle
Wenn Sie cocos2d verwenden, tritt möglicherweise ein Problem mit [parentView bringSubviewToFront: view] auf, zumindest hat es bei mir nicht funktioniert. Anstatt die gewünschte Ansicht nach vorne zu bringen, sende ich die anderen Ansichten zurück und das hat den Trick getan.
quelle
Wir können zPosition in ios verwenden
Wenn wir eine Ansicht mit dem Namen salonDetailView haben, z.
@IBOutlet weak var salonDetailView: UIView!
In meinem Fall siehe das Bild
und haben UIView für GMSMapView zB:
@IBOutlet weak var mapViewUI: GMSMapView!
Anzeigen der Ansicht salonDetailView oben in der mapViewUI
Verwenden Sie zPosition wie folgt
quelle
Oder benutze dies
wie hier
quelle