Menurut dokumentasi untuk UIVIew @property(nonatomic) CGFloat alpha
Nilai properti ini adalah angka floating-point dalam kisaran 0,0 hingga 1,0, di mana 0,0 mewakili transparan sepenuhnya dan 1,0 mewakili buram total. Nilai ini hanya mempengaruhi tampilan saat ini dan tidak mempengaruhi subview yang disematkan.
Saya memiliki tampilan kontainer yang dikonfigurasi sebagai berikut:
self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];
Dan kemudian tambahkan subview ke 'myView'
[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected
Tapi ' anotherView ' memang memiliki alfa di layar (tidak buram seperti yang diharapkan)
Bagaimana ini bisa terjadi dan apa yang bisa dilakukan?
ios
objective-c
uiview
alpha-transparency
Avner Barr
sumber
sumber
self.myView
? dan menambahkan tampilan lain seperti[self.self addSubview:self.myView];
alpha
nilai dimana semuaalpha
nilai subview , dikalikan. misalnya jika subview alpha0.8
dan superview alpha1.0
, tetapi Anda mengubahnya menjadi0.6
, subview alpha masih sama ,0.8
. nilai alpha subview yang dirender hanya diubah dari0.8
menjadi0.48
.Jawaban:
Saya rasa ini adalah bug dalam dokumentasi. Anda harus mengajukannya di bugreport.apple.com.
Semua yang dapat saya lihat setelah sedikit penelitian singkat menunjukkan apa yang Anda lihat adalah bagaimana ia selalu berperilaku, dan pengujian saya sendiri menunjukkannya juga.
Alfa tampilan diterapkan ke semua sub-tampilan.
Mungkin yang Anda butuhkan hanyalah
[[UIColor blackColor] colorWithAlphaComponent:0.5]
tetapi jika tidak, Anda perlu menjadikan tampilan ini sebagai saudara, bukan anak.sumber
Jangan setel alfa secara langsung pada tampilan induk. Alih-alih menggunakan baris kode di bawah ini yang akan menerapkan transparansi ke tampilan induk tanpa memengaruhi tampilan turunannya.
[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];
sumber
Dengan cepat
view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
DIPERBARUI UNTUK SWIFT 3
view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
sumber
Menyetel Opasitas warna latar belakang sebagai ganti alfa tidak akan memengaruhi tampilan turunannya.
Atau Anda dapat mengatur dengan programmetically
var customView:UIView = UIView() customView.layer.opacity = 0.3
Itu dia. Selamat Coding !!!
sumber
Jika Anda menyukai Storyboards, berikan pandangan
User Defined Runtime Attribute
Anda diIdentity Inspector
:Key Path: backgroundColor
,, misalnyaType: Color
,Value:
warna putih dengan Opacity 50%.sumber
Solusi paling sederhana seperti yang dibahas adalah mengubah alfa sebagai berikut: Versi terbaru untuk Xcode 8 Swift 3 adalah:
yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)
Tujuan C:
yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
Lihat Dokumen Pengembang Apple di sini: https://developer.apple.com/reference/uikit/uiview/1622417-alpha
sumber
Di Swift 4.2 dan Xcode 10.1
Jangan menambahkan warna dan nilai alpha melalui storyboard. Hanya pendekatan terprogram yang akan berfungsi dalam kasus ini.
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
sumber
Berikut ini solusi yang agak rumit:
UIView *container; UIView *myView; UIView *anotherView; myView.alpha = 0.5; [container addSubview:myView]; anotherView.alpha = 1; [container addSubview:anotherView];
Gunakan
container
tampilan sebagai tampilan super,anotherView
danmyView
keduanya merupakan sub - tampilancontainer
,anotherView
bukan merupakan subview dalammyView
.sumber
Untuk saat ini hanya ada satu cara membuat Parent View transparan dan tidak meletakkan tampilan anak di dalam (jangan letakkan tampilan apa pun sebagai subview) tampilan induk, letakkan tampilan anak tersebut di luar tampilan induk. Untuk membuat tampilan orang tua transparan, Anda dapat melakukannya melalui storyboard.
//Transparent the parentView parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)
Letakkan tampilan lain di luar tampilan induk. Ini akan bekerja seperti pesona.
sumber
Silakan lihat deskripsi tebal dari dokumentasi Xcode.
sumber