Jawaban:
UIViewsaudara kandung ditumpuk sesuai urutan di mana mereka ditambahkan ke superview mereka. The UIViewmetode hirarki dan properti yang ada untuk mengelola tampilan order. Dalam 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;
Tampilan saudara diperintahkan kembali ke depan dalam subviewsarray. Jadi tampilan teratas adalah:
[parentView.subviews lastObject];
dan tampilan bawah adalah:
[parentView.subviews objectAtIndex:0];
Seperti kata Kolin Krewinkel, [parentView bringSubviewToFront:view]akan membawa pandangan ke atas, tetapi ini hanya terjadi jika pandangan semua saudara dalam hierarki.
Anda dapat menggunakan zPositionproperti dari layer view (ini adalah CALayerobjek) untuk mengubah indeks-z view.
theView.layer.zPosition = 1;
Seperti yang ditambahkan Viktor Nordling , "nilai besar ada di atas. Anda dapat menggunakan nilai apa pun yang Anda inginkan, termasuk nilai negatif." Nilai standarnya adalah 0.
Anda perlu mengimpor kerangka kerja QuartzCore untuk mengakses lapisan. Tambahkan saja baris kode ini di bagian atas file implementasi Anda.
#import "QuartzCore/QuartzCore.h"
zPositionkarya?
IB dan Swift
Mengingat tata letak yang mengalir di mana kuning adalah superview dan merah, hijau, dan biru adalah saudara subview dari kuning,
tujuannya adalah untuk memindahkan subview (katakanlah hijau) ke atas.
Di Interface Builder yang perlu Anda lakukan adalah menyeret tampilan yang ingin Anda perlihatkan di bagian atas ke bawah daftar dalam Garis Besar Dokumen.
Atau, Anda dapat memilih tampilan dan kemudian di menu buka Editor> Arrange> Send to Front .
Ada beberapa cara berbeda untuk melakukan ini secara terprogram.
Metode 1
yellowView.bringSubviewToFront(greenView)
Metode ini adalah program setara dengan jawaban IB di atas.
Ini hanya berfungsi jika subview adalah saudara satu sama lain.
Array subview terdapat di yellowView.subviews. Di sini, bringSubviewToFrontpindahkan greenViewindeks dari 0ke 2. Ini bisa diamati dengan
print(yellowView.subviews.indexOf(greenView))
Metode 2
greenView.layer.zPosition = 1
0untuk semua tampilan lain, hasilnya adalah greenViewtampilannya di atas. Namun, masih tetap pada indeks 0dari yellowView.subviewsarray yang. Namun, ini dapat menyebabkan beberapa hasil yang tidak terduga, karena hal-hal seperti acara tap masih akan lebih dulu dilihat oleh nomor indeks tertinggi. Karena itu, mungkin lebih baik menggunakan Metode 1 di atas.zPositiondapat diatur ke CGFloat.greatestFiniteMagnitude( CGFloat(FLT_MAX)dalam versi Swift yang lebih lama) untuk memastikannya ada di atas.[parentView bringSubviewToFront:view] ;
Dalam tampilan yang ingin Anda bawa ke atas ... (cepat)
superview?.bringSubviewToFront(self)
Jika Anda menggunakan cocos2d, Anda mungkin melihat masalah dengan [parentView bringSubviewToFront: view], setidaknya itu tidak berfungsi untuk saya. Alih-alih membawa tampilan yang saya inginkan ke depan, saya mengirim pandangan lain kembali dan itu berhasil.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Kita dapat menggunakan zPosition di ios
jika kita memiliki tampilan bernama salonDetailView
misalnya:@IBOutlet weak var salonDetailView: UIView!
Dalam kasus saya, lihat gambar
dan minta UIView untuk GMSMapView
misalnya:@IBOutlet weak var mapViewUI: GMSMapView!
Untuk menampilkan Lihat salonDetailView di atas mapViewUI
gunakan zPosisi seperti di bawah ini
salonDetailView.layer.zPosition = 1