Chcę przenieść jeden widok na drugi, w jaki sposób mogę poznać indeks Z widoku i jak przejść na górę?
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
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 .
W Swift
Istnieje kilka różnych sposobów na zrobienie tego programowo.
Metoda 1
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
. TutajbringSubviewToFront
przenosigreenView
indeks0
z2
. Można to zaobserwować za pomocąMetoda 2
0
dla wszystkich innych widoków, w rezultaciegreenView
wygląda tak, jakby był na górze. Jednak nadal pozostaje w indeksie0
wyellowView.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ć ustawionyCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
w starszych wersjach Swift), aby upewnić się, że jest na szczycie.źródło
źródło
Jeśli chcesz to zrobić za pomocą Konstruktora interfejsów XCode, możesz użyć opcji menu w Edytorze-> Aranżacja. Znajdziesz tam „Send to Front”, „Send to Back” itp.
źródło
W widoku, który chcesz przenieść na szczyt ... (szybko)
źródło
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ę.
źródło
Możemy używać zPosition na iOS
jeśli mamy widok o nazwie salonDetailView np .:
@IBOutlet weak var salonDetailView: UIView!
W moim przypadku zobacz obraz
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
źródło
Lub użyj tego
jak tutaj
źródło