UIView'de alfa ayarlanması, olmaması gereken alt görünümlerdeki alfa'yı ayarlar


88

Belgelerine göre UIVIew @property(nonatomic) CGFloat alpha

Bu özelliğin değeri, 0.0 ile 1.0 arasında bir kayan noktalı sayıdır; burada 0.0 tamamen saydamlığı ve 1.0, tamamen opaklığı temsil eder. Bu değer yalnızca mevcut görünümü etkiler ve gömülü alt görünümlerinin hiçbirini etkilemez.

Aşağıdaki şekilde yapılandırılmış bir kapsayıcı görünümüm var:

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

Ve sonra 'myView'a alt görünümler ekleyin

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

Ancak ' anotherView ' ekranında alfa var (beklendiği gibi opak değil)

Bu nasıl olabilir ve ne yapılabilir?


Belki de alt görünüm ekleme ve alfa ayarlama sırası önemlidir. Farklı dizilerle oynamayı deneyin.
Joride

AnotherView'ın tüm oluşturma kodunu ekleyin :) ve ayrıca yazım hatası olduğunu düşünüyorum ama başlattığınızdan emin misiniz self.myView? ve benzer başka bir görünüm ekleyin[self.self addSubview:self.myView];
iPatel

1
gerçekten de dokümantasyon doğrudur: bu , gömülü alt görünümlerini etkilemez ve alt görünümlerin alfa değeri her zaman aynıdır - ancak işlenmiş görünümlerin alpha, tüm alt görünümlerin alphadeğerleri çarpılan bir değeri vardır . Örneğin, alt görünümler alfa 0.8ve süpervizörün alfa ise 1.0, ancak bunu olarak değiştirirseniz 0.6, alt görünümler alfa hala aynıdır 0.8. işlenen alt görünümün alfa değeri yalnızca olarak 0.8değiştirilir 0.48.
holex

Yanıtlar:


119

Bunun belgelerde bir hata olduğunu düşünüyorum. Bugreport.apple.com adresinde dosyalamalısınız.

Biraz hızlı araştırmadan sonra görebildiğim her şey, gördüğünüz şeyin her zaman nasıl davrandığını gösteriyor ve benim kendi testlerim de bunu gösteriyor.

Bir görünümün alfa değeri tüm alt görünümlere uygulanır.

Belki de ihtiyacınız olan tek şey, [[UIColor blackColor] colorWithAlphaComponent:0.5]ancak değilse, manzarayı bir çocuk yerine kardeş yapmanız gerekecek.


21
+1. FWIW, bence dokümanlar, son derece net değilse (tüm pratik amaçlar için yanlış olma noktasına kadar) tartışmalı olarak doğru. Alt görünümlerin alfa değeri etkilenir, ancak alfa değeri etkilenmez. Gizli mülk için de aynı davranış bu. Gizli ayarı alt görünümleri gizler ancak alt görünümlerin gizli özelliğinin ayarlanmasına neden olmaz.
Bjorn Roche

2
uipopover gibi bir şey göstermem gerekiyordu ama iphone'da. [[UIColor blackColor] colorWithAlphaComponent: 0.5] ile bir uiviewcontroller oluşturmam gerekiyor. işe yaradığı için teşekkürler
Alok

2
Dokümanların "muhtemelen doğru" olduğuna inanmıyorum. Gerçek dünyada, geliştiriciler dokümanları okuyacak ve alt alfaların etkilenmediğine inanacaktır. Gerçekte, birleştirilmiş sonuç, alfa değiştirilmiş gibi olacaktır. Bu sadece bir kötü dokümantasyon vakası.
Womble

43

Alfa'yı doğrudan üst öğe görünümünde ayarlamayın. Bunun yerine, alt görünümlerini etkilemeden üst görünüme şeffaflık uygulayacak aşağıdaki kod satırını kullanın.

[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];


bu kod en son ios ve xcode ile çalışmıyor. Herkesin farklı fikirleri var mı?
Moxarth

1
Mükemmel!! Swift 4 için şunu kullanın: parentView.backgroundColor = UIColor.black.withAlphaComponent (0.5)
Rakesh Yembaram

Harika çözüm.
iLearner

27

Hızlı

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

SWIFT 3 İÇİN GÜNCELLENDİ

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

2
Bu, sorulan soruyu ele almıyor.
David Berry

Bu bana bir hata veriyor: "'UIColor' türünün değerinde 'colorWithAlphaComponent' üyesi yok".
Krivvenz

1
Merhaba @ Krivvenz, 'colorWithAlphaComponent', 'withAlphaComponent' olarak yeniden adlandırıldı. Düzenlenmiş cevabıma bakın.
Nazarii Stadnytskyi

bu kod çalışmıyor. itilmiş görünümü şeffaf olarak göremeyiz. başka bir fikri olan var mı?
Moxarth

21

Alfa yerine arka plan renginin Opaklığını ayarlamak, alt görünümlerini etkilemez.

  1. görünümü seçin.
  2. arka plan renginden çok öznitelik denetçisine git
  3. "diğerleri" üzerine tıklayın
  4. opaklığı% 30'a ayarla

Veya programlı olarak ayarlayabilirsiniz

var customView:UIView = UIView()
customView.layer.opacity = 0.3

Bu kadar. Mutlu Kodlama !!!


Bunu programlı olarak yapmanın bir yolu var mı?
DCIndieDev

@DCIndieDev Üzgünüm UIView özelliği olarak opaklık bulamadım. Öyleyse film şeridi tarafından belirlenir.
MRizwan33

Bu harika bir cevap. Harika çalıştı.
Joe Susnick

Bu kabul edilen cevap olmalı, Gerektiği gibi çalıştı. Teşekkürler.
Missa

1
@ MRizwan33 Opaklık özelliğine [UIView'unuz] .layer.opacity'den erişebilirsiniz
Missa

16

Storyboard'ları seviyorsanız, User Defined Runtime Attributegörünümünüz için şuraya bir koyun Identity Inspector:

Key Path: backgroundColor, Type: Color, Value:Opaklık% 50 beyaz renk, örn.


Mükemmel cevap! Nitelikler Denetçisinde, görünümün alfasını bire ayarladım. Identity Inspector'da yukarıdaki gibi Opacity% 50 ile anahtar yolu ekliyorum. Görünümün opaklığı şu anda% 50'de, ancak alt görünümlerin opaklığı hala% 100. Sanırım alfa ve opaklık aynı değil.
etayluz

6

Tartışıldığı gibi en basit çözüm, alfayı aşağıdaki gibi değiştirmektir: Xcode 8 Swift 3 için güncellenmiş sürüm:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

Hedef C:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

Apple Geliştirici Belgelerine buradan bakın: https://developer.apple.com/reference/uikit/uiview/1622417-alpha


evet bunu uyguladım, ancak görünüm şeffaflaşmadı. Bu kodu daha önce birçok kez kullandım. ama bu sefer çalışmıyor. ve görüşümü düz siyah olarak gösteriyor. yani alternatif bir yöntem mi yoksa yeni iOS güncellemeleriyle değişti mi?
Moxarth

Muhtemelen yourParentView'unuzun arkasındaki görünüm düz siyah olmalıdır, lütfen film şeridinizi xib için kontrol edin ve ayrıca başka herhangi bir yerden siyaha ayarlanıp ayarlanmadığına dair kodunuzu kontrol edin. Bu yardımcı olur umarım
Ankit Kumar Gupta

sadece bir görünümden başka bir görüntüyü zorluyorum. itilen görünüm bu koddan sonra şeffaf görünecektir. daha önce birçok kez kullandım. bu kadar basit. -> ayarlar * set = [[ayarlar yerleştirilir] initWithNibName: @ "ayarlar" bundle: nil]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0.3f]; -> [self.navigationController pushViewController: animasyonu ayarla: YES];
Moxarth

xib mi yoksa storyboard mu kullanıyorsun?
Ankit Kumar Gupta

ama şimdi bu kodu kullanıyorum ve çalışmıyor. Basılmış görünüm, verdiğimiz renk ne olursa olsun şeffaf değil düz renkte görünecektir.
Moxarth

5

Swift 4.2 ve Xcode 10.1'de

Film şeridi aracılığıyla renk ve alfa değeri eklemeyin. Bu durumda yalnızca programlı yaklaşım işe yarayacaktır.

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

@iOS Teşekkür ederim, bu bana yardımcı oldu.
Raghuram

2

İşte biraz karmaşık bir çözüm:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

Bir kullan containerSuperview olarak görünümü, anotherViewve myViewher ikisi de Subview içindedir container, anotherViewbir Subview değildir myView.


2

Şimdilik, Üst Görünümü şeffaf yapmanın ve üst görünümün içine herhangi bir alt görünüm koymayın (herhangi bir görünümü alt görünüm olarak koymayın), bu alt görünümü üst görünümün dışına koyun. Ebeveyn görünümünü şeffaf hale getirmek için bunu film şeridi aracılığıyla yapabilirsiniz.

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

Diğer görünümü üst görünümün dışına yerleştirin. Bir cazibe gibi çalışacak.


0

Lütfen Xcode belgelerindeki kalın açıklamaya bakın.

Bu özelliğin değeri, 0.0 ile 1.0 arasında bir kayan noktalı sayıdır; burada 0.0 tamamen saydamlığı ve 1.0, tamamen opaklığı temsil eder. Bu özelliğin değerinin değiştirilmesi, yalnızca mevcut görünümün alfa değerini günceller. Ancak, bu alfa değerinin sağladığı şeffaflık, alt görünümleri de dahil olmak üzere görünümün tüm içeriğini etkiler. Örneğin, 0.5 alfa değerine sahip bir üst görünümde gömülü olan 1.0 alfa değerine sahip bir alt görünüm, alfa değeri de 0.5miş gibi ekranda görünür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.