Jak ustawić iPhone UIView z index?
Chcę przenieść jeden widok na drugi, Jak mogę poznać indeks z widoku i jak przejść na górę?
8 answers
UIView
rodzeństwo jest ułożone w kolejności, w jakiej jest dodawane do superwizji. Metody i właściwości hierarchii UIView
służą do zarządzania kolejnością widoków. 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 z powrotem do przodu w tablicy subviews
. Więc najwyższy widok będzie:
[parentView.subviews lastObject];
I 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 widoki są rodzeństwem w hierarchii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 22:42:10
Możesz użyć właściwości zPosition
warstwy widoku (jest to obiekt CALayer
), aby zmienić indeks z widoku.
theView.layer.zPosition = 1;
Jak dodał Viktor Nordling , " wielkie wartości są na szczycie. Możesz użyć dowolnych wartości, w tym wartości ujemnych."Wartością domyślną jest 0.
Aby uzyskać dostęp do warstwy, musisz zaimportować framework QuartzCore. Wystarczy dodać ten wiersz kodu na górze pliku implementacji.
#import "QuartzCore/QuartzCore.h"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:25
[parentView bringSubviewToFront:view] ;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-25 21:53:51
IB i Swift
W przeciwieństwie do poprzednich części serii, nie jest to pierwsza część serii, która została wydana w 2007 roku.]}Celem jest przeniesienie subview (powiedzmy zielony) na górę.
In Interface Builder
W Kreatorze interfejsów wystarczy przeciągnąć widok, który ma być wyświetlany u góry na dół listy w dokumentach Zarys.
Alternatywnie możesz wybrać widok, a następnie w menu przejdź do edytora > ułóż > Wyślij do przodu.
W Swift
Istnieje kilka różnych sposobów, aby to zrobić programowo.
Metoda 1
yellowView.bringSubviewToFront(greenView)
- ta metoda jest programowym odpowiednikiem odpowiedzi IB powyżej.
- to działa tylko wtedy, gdy podviews są rodzeństwem siebie.
-
Tablica podglądy zawarte są w
yellowView.subviews
. TutajbringSubviewToFront
przenosigreenView
z indeksu0
na2
. Można to zaobserwować przyprint(yellowView.subviews.indexOf(greenView))
Metoda 2
greenView.layer.zPosition = 1
- ta metoda po prostu przesuwa pozycję 3D warstwy wyżej (bliżej użytkownika) na osi Z. Ponieważ domyślną wartością jest
0
dla wszystkich innych widoków, w rezultaciegreenView
wygląda tak, jakby był na wierzchu. Jednak nadal pozostaje w indeksie0
tablicyyellowView.subviews
. Może to spowodować nieoczekiwane wyniki, jednak, ponieważ rzeczy takie jak tap zdarzenia nadal będzie iść pierwszy do widoku z najwyższym numerem indeksu. Z tego powodu lepiej byłoby zastosować metodę 1 powyżej. -
zPosition
można ustawić naCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
w starszych wersjach Swift), aby upewnić się, że jest on na górze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 15:14:36
Jeśli chcesz to zrobić za pomocą Kreatora interfejsu XCode, możesz użyć opcji menu pod edytor- > układ. Znajdziesz tam "Wyślij do przodu"," Wyślij do tyłu " itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 12:48:47
W widoku, który chcesz wnieść na górę... (w języku swift)
superview?.bringSubviewToFront(self)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 16:31:00
Jeśli używasz cocos2d, możesz zobaczyć problem z [parentView bringSubviewToFront: view], przynajmniej nie działał dla mnie. Zamiast sprowadzać widok, który chciałem z przodu, odsyłam inne widoki z powrotem i to załatwiło sprawę.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-18 08:59:58
Lubię dostosowywać interfejs UI w interfejsie storyboard UI. Używam tag
do wskazania tych widoków z-Index
.
W swift 3
// Connect to those views, who need to adjust their z position.
@IBOutlet var viewSetZIndex: [UIView]!
// In `viewDidLoad`, or `awakeFromNib`
for v in viewSetZIndex {
// Use `tag` to adjust `zPosition`
v.layer.zPosition = CGFloat(v.tag)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-02 05:51:57