it-swarm.com.de

Wie stelle ich den iPhone UIView z Index ein?

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?

242
Tattat

UIView Geschwister werden in der Reihenfolge gestapelt, in der sie zu ihrer Übersicht hinzugefügt wurden. Die Hierarchiemethoden und -eigenschaften von UIView dienen zum Verwalten der Anzeigereihenfolge. 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 Ansichten der Geschwister sind im Array subviews von hinten nach vorne angeordnet. Die oberste Ansicht ist also:

[parentView.subviews lastObject];

und Ansicht von unten ist:

[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.

276
Nathan Eror

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;

Wie Viktor Nordling hinzugefügt hat: "Große Werte stehen oben. Sie können alle gewünschten Werte verwenden, einschließlich negativer Werte." 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"
320

IB und Swift

Angesichts des fließenden Layouts, in dem Gelb die Übersicht ist und Rot, Grün und Blau gleichgeordnete Unteransichten von Gelb sind,

views - red view on top

das Ziel ist es, eine Unteransicht (sagen wir grün) nach oben zu verschieben.

views - green view on top

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 Dokumentenübersicht ziehen.

order of views in Interface Builder

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

yellowView.bringSubviewToFront(greenView)
  • Diese Methode ist das programmatische Äquivalent der obigen IB-Antwort.
  • Dies funktioniert nur, wenn die Unteransichten Geschwister sind.
  • Ein Array der Unteransichten ist in yellowView.subviews Enthalten. Hier verschiebt bringSubviewToFront das greenView vom Index 0 Nach 2. Dies kann mit beobachtet werden

    print(yellowView.subviews.indexOf(greenView))
    

Methode 2

greenView.layer.zPosition = 1
  • Diese Methode verschiebt lediglich die 3D-Position der Ebene auf der Z-Achse nach oben (näher am Benutzer). Da die Standardeinstellung für alle anderen Ansichten 0 Ist, sieht das greenView so aus, als wäre es oben. Es bleibt jedoch weiterhin auf dem Index 0 Des Arrays yellowView.subviews. Dies kann jedoch zu unerwarteten Ergebnissen führen, da beispielsweise Tippereignisse weiterhin zuerst in die Ansicht mit der höchsten Indexnummer verschoben werden. Aus diesem Grund ist es möglicherweise besser, mit der obigen Methode 1 fortzufahren.
  • Das zPosition könnte auf CGFloat.greatestFiniteMagnitude (CGFloat(FLT_MAX) in älteren Versionen von Swift) gesetzt werden, um sicherzustellen, dass es oben ist.
92
Suragch
[parentView bringSubviewToFront:view] ;
74
Kolin Krewinkel

Wenn Sie dies über den Interface Builder von XCode tun möchten, können Sie die Menüoptionen unter Editor-> Arrangement verwenden. Dort finden Sie "Send to Front", "Send to Back" usw.

19
larspars

Innerhalb der Ansicht, die Sie nach oben bringen möchten ... (in Swift)

superview?.bringSubviewToFront(self)
9
Carter Medlin

Wenn Sie cocos2d verwenden, wird möglicherweise ein Problem mit [parentView bringSubviewToFront: view] angezeigt, das zumindest bei mir nicht funktioniert hat. Anstatt die gewünschte Ansicht nach vorne zu bringen, sende ich die anderen Ansichten zurück, und das hat den Trick getan.

[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)]; 
4
Madhav Sbss

Wir können zPosition in ios verwenden

wenn wir eine Ansicht mit dem Namen salonDetailView haben, zB: @IBOutlet weak var salonDetailView: UIView!

In meinem Fall siehe das Bild

und habe UIView für GMSMapView zB: @IBOutlet weak var mapViewUI: GMSMapView!

Zum Anzeigen der Ansicht salonDetailView oben in mapViewUI

verwende zPosition wie folgt

salonDetailView.layer.zPosition = 1
1
abhijith k