Yanıtlar:
UIView
kardeşler gözetimine eklendikleri sıraya göre dizilirler. UIView
Hiyerarşi yöntemleri ve özellikleri görünüm sırasını yönetmek için vardır. UIView.h dilinde:
@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;
Kardeş görünümleri subviews
dizide öne doğru sıralanır . Yani en üstteki görüş:
[parentView.subviews lastObject];
ve alttan görünüm:
[parentView.subviews objectAtIndex:0];
Kolin Krewinkel'in dediği gibi, [parentView bringSubviewToFront:view]
görünümü zirveye taşıyacak, ancak bu sadece görüşlerin hiyerarşideki tüm kardeşleri olması durumunda geçerlidir.
Sen kullanabilirsiniz zPosition
görünümün tabakasının (bir var malı CALayer
bakış z-index değiştirmek için nesne).
theView.layer.zPosition = 1;
As Viktor Nordling eklendi, "büyük değerler üzerinde bulunmaktadır. Negatif değerler de dahil olmak üzere istediğiniz tüm değerleri kullanabilirsiniz." Varsayılan değer 0'dır.
Katmana erişmek için QuartzCore çerçevesini içe aktarmanız gerekir. Bu kod satırını uygulama dosyanızın üstüne eklemeniz yeterlidir.
#import "QuartzCore/QuartzCore.h"
zPosition
?
IB ve Swift
Sarının denetimin olduğu ve kırmızı, yeşil ve mavinin sarı alt kardeşleri olduğu akan düzen göz önünde bulundurulduğunda
amaç bir alt görünümü (diyelim yeşil) tepeye taşımaktır.
Arayüz Oluşturucu'da tek yapmanız gereken Dokümanlar Anahattı'nda listenin en altına göstermek istediğiniz görünümü sürüklemektir.
Alternatif olarak, görünümü seçebilir ve ardından menüde Düzenleyici> Yerleştir> Öne Gönder'e gidebilirsiniz .
Bunu programlı olarak yapmanın birkaç farklı yolu vardır.
Yöntem 1
yellowView.bringSubviewToFront(greenView)
Bu yöntem yukarıdaki IB cevabının programlı eşdeğeridir.
Sadece alt görüşlerin birbirinin kardeşi olması durumunda çalışır.
İçinde bir dizi alt görünüm bulunur yellowView.subviews
. Burada, bringSubviewToFront
hareket greenView
dizinden 0
için 2
. Bu ile görülebilir
print(yellowView.subviews.indexOf(greenView))
Yöntem 2
greenView.layer.zPosition = 1
0
diğer tüm görünümler için olduğundan, sonuç greenView
üstte olduğu gibidir. Ancak, yine 0
de yellowView.subviews
dizinin dizininde kalır . Yine de bu, bazı beklenmedik sonuçlara neden olabilir, çünkü dokunma etkinlikleri gibi şeyler yine de en yüksek dizin numarasına sahip görünüme gider. Bu nedenle, yukarıdaki Yöntem 1'e gitmek daha iyi olabilir.zPosition
Olarak ayarlanmış olabilir CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
üstte olduğundan emin olmak için Swift eski sürümlerinde).[parentView bringSubviewToFront:view] ;
Görünüm içinde en üste getirmek istediğiniz ... (hızlı bir şekilde)
superview?.bringSubviewToFront(self)
Cocos2d kullanıyorsanız, [parentView bringSubviewToFront: view] ile ilgili bir sorun görebilirsiniz, en azından benim için çalışmıyor. İstediğim görüntüyü öne getirmek yerine, diğer görüşleri geri gönderiyorum ve bu hile yaptı.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
İos'ta zPosition'ı kullanabiliriz
salonDetailView adlı bir görünümümüz varsa,
örneğin:@IBOutlet weak var salonDetailView: UIView!
Benim durumumda görüntüye bakın
ve GMSMapView için UIView'e sahip olun
:@IBOutlet weak var mapViewUI: GMSMapView!
Görünüm göstermek için salonDetailView üst mapViewUI
zPosition'ı aşağıdaki gibi kullanın
salonDetailView.layer.zPosition = 1