Odpowiedzi:
UIView
rodzeństwo jest ułożone w stosy w kolejności, w jakiej są dodawane do swojego podglądu. Te UIView
metody i właściwości hierarchii istnieją zarządzać widok zamówienie. W 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;
Widoki rodzeństwa są uporządkowane w subviews
tablicy od początku do końca . Najwyższy widok to:
[parentView.subviews lastObject];
a widok z dołu będzie:
[parentView.subviews objectAtIndex:0];
Jak powiedział Kolin Krewinkel, [parentView bringSubviewToFront:view]
przeniesie widok na górę, ale dzieje się tak tylko wtedy, gdy wszystkie widoki są rodzeństwem w hierarchii.
Możesz użyć zPosition
właściwości warstwy widoku (jest to CALayer
obiekt), aby zmienić indeks Z widoku.
theView.layer.zPosition = 1;
Jak dodał Viktor Nordling , „duże wartości są na górze. Możesz użyć dowolnych wartości, w tym ujemnych”. Wartość domyślna to 0.
Aby uzyskać dostęp do warstwy, musisz zaimportować platformę QuartzCore. Po prostu dodaj ten wiersz kodu u góry pliku implementacji.
#import "QuartzCore/QuartzCore.h"
zPosition
prace?
IB i Swift
Biorąc pod uwagę płynny układ, w którym żółty jest podglądem, a czerwony, zielony i niebieski są podglądami żółtego rodzeństwa,
celem jest przeniesienie widoku podrzędnego (powiedzmy zielonego) na górę.
W Konstruktorze interfejsów wszystko, co musisz zrobić, to przeciągnąć widok, który chcesz pokazać na górze na dół listy w konspekcie dokumentów.
Możesz też wybrać widok, a następnie w menu przejść do Edytora> Ułóż> Wyślij na przód .
Istnieje kilka różnych sposobów na zrobienie tego programowo.
Metoda 1
yellowView.bringSubviewToFront(greenView)
Ta metoda jest programowym odpowiednikiem powyższej odpowiedzi IB.
Działa to tylko wtedy, gdy wywiady są rodzeństwem.
Tablica widoków podrzędnych znajduje się w yellowView.subviews
. Tutaj bringSubviewToFront
przenosi greenView
indeks 0
z 2
. Można to zaobserwować za pomocą
print(yellowView.subviews.indexOf(greenView))
Metoda 2
greenView.layer.zPosition = 1
0
dla wszystkich innych widoków, w rezultacie greenView
wygląda tak, jakby był na górze. Jednak nadal pozostaje w indeksie 0
w yellowView.subviews
tablicy. Może to jednak powodować nieoczekiwane wyniki, ponieważ takie rzeczy, jak zdarzenia dotknięcia, nadal będą najpierw wyświetlane w widoku o najwyższym numerze indeksu. Z tego powodu może być lepiej zastosować Metodę 1 powyżej.zPosition
Mógł być ustawiony CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
w starszych wersjach Swift), aby upewnić się, że jest na szczycie.[parentView bringSubviewToFront:view] ;
W widoku, który chcesz przenieść na szczyt ... (szybko)
superview?.bringSubviewToFront(self)
Jeśli używasz cocos2d, możesz zobaczyć problem z [ParentView bringSubviewToFront: widok], przynajmniej nie działało to dla mnie. Zamiast przynieść widok, który chciałem na pierwszy plan, odsyłam pozostałe widoki i to załatwiło sprawę.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Możemy używać zPosition na iOS
jeśli mamy widok o nazwie salonDetailView
np .:@IBOutlet weak var salonDetailView: UIView!
i mieć UIView dla GMSMapView
np .:@IBOutlet weak var mapViewUI: GMSMapView!
Aby wyświetlić widok View salonDetailView na górze mapViewUI
użyj zPosition jak poniżej
salonDetailView.layer.zPosition = 1