Saya ingin memindahkan satu tampilan di atas yang lain, bagaimana saya bisa mengetahui indeks z dari tampilan, dan bagaimana untuk pindah ke atas?
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
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 .
Dalam Swift
Ada beberapa cara berbeda untuk melakukan ini secara terprogram.
Metode 1
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
pindahkangreenView
indeks dari0
ke2
. Ini bisa diamati denganMetode 2
0
untuk semua tampilan lain, hasilnya adalahgreenView
tampilannya di atas. Namun, masih tetap pada indeks0
dariyellowView.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 keCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
dalam versi Swift yang lebih lama) untuk memastikannya ada di atas.sumber
sumber
Jika Anda ingin melakukan ini melalui Interface Builder XCode, Anda dapat menggunakan opsi menu di bawah Pengaturan Editor->. Di sana Anda akan menemukan "Kirim ke Depan", "Kirim ke Kembali", dll.
sumber
Dalam tampilan yang ingin Anda bawa ke atas ... (cepat)
sumber
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.
sumber
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
sumber
Atau gunakan ini
sesuai di sini
sumber