Jawaban:
UIView
saudara kandung ditumpuk sesuai urutan di mana mereka ditambahkan ke superview mereka. The UIView
metode 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 subviews
array. 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 zPosition
properti dari layer view (ini adalah CALayer
objek) 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"
zPosition
karya?
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, bringSubviewToFront
pindahkan greenView
indeks dari 0
ke 2
. Ini bisa diamati dengan
print(yellowView.subviews.indexOf(greenView))
Metode 2
greenView.layer.zPosition = 1
0
untuk semua tampilan lain, hasilnya adalah greenView
tampilannya di atas. Namun, masih tetap pada indeks 0
dari yellowView.subviews
array 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.zPosition
dapat 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