2015-03-07 6 views
8

mam przeżywa słabe renderowanie efektu żywiołowość na moim iPhone 6.UIVibrancyEffect przyciemnione na urządzeniu, żywy w symulatorze

Jak to wygląda: simulator vs. device

Sprawdziłem wartość UIAccessibilityIsReduceTransparencyEnabled() i zwraca wartość false na obu urządzeniach iw symulatorze.

Kod dla obrazu tła, efektów i containerView że dodać co inne elementy wygląda następująco:

import Foundation 
import UIKit 
import PureLayout 

class BackgroundImageView : UIView { 
    let bgImage = UIImageView(forAutoLayout:()) 
    var blurView:UIVisualEffectView! 
    var vibrancyView:UIVisualEffectView! 

    var containerView: UIView? = nil { 
     willSet(container) { 
      vibrancyView.contentView.addSubview(container!) 
     } 
    } 

    init(imageName: String) { 
     super.init() 

     let screenSize: CGRect = UIScreen.mainScreen().bounds 

     bgImage.image = UIImage(named: imageName) 
     // Scale relative to the size of the iPhone 6 Plus: http://martinnormark.com/smooth-transition-from-launch-image-to-view-controller-in-ios/ 
     bgImage.transform = CGAffineTransformMakeScale(screenSize.width/414, screenSize.height/736) 

     self.addSubview(bgImage) 

     let blurEffect = UIBlurEffect(style: .Dark) 
     self.blurView = UIVisualEffectView(effect: blurEffect) 
     self.blurView.setTranslatesAutoresizingMaskIntoConstraints(false) 

     self.addSubview(blurView) 

     let vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 
     vibrancyView = UIVisualEffectView(effect: vibrancyEffect) 
     vibrancyView.setTranslatesAutoresizingMaskIntoConstraints(false) 

     blurView.contentView.addSubview(vibrancyView) 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override func updateConstraints() { 
     super.updateConstraints() 

     bgImage.autoCenterInSuperview() 
     containerView?.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsZero) 
     blurView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsZero) 
     vibrancyView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsZero) 
    } 
} 

Odpowiedz

3

Być może UIAccessibilityDarkerSystemColorsEnabled() zwraca wartość true dla telefonu iPhone 6 lub iPhone 6 plus, więc wygląda na ciemniejszy.

Aby wyłączyć, przejdź do Ustawienia -> Ogólne -> Dostępność -> Zwiększ kontrast -> Przyciemnij kolory, wyłącz go powinno działać.

Edit

Jak stwierdzono w dokumencie UIVibrancyEffect.

Efekt wibracji zależy od koloru. Wszelkie subviews, które dodasz do contentView, muszą odpowiednio zaimplementować metodę tintColorDidChange i . Obiekty UIImageView ze zdjęciami, które mają tryb renderowania UIImageRenderingModeAlwaysTemplate, a także obiekty UILabel będą aktualizowane automatycznie.

Powinniśmy użyć wizerunki z trybu oddawania UIImageRenderingModeAlwaysTemplate aby UIImageView obiekty aktualizować automatycznie. Zastosowanie tego sprawia, że ​​urządzenie UIVibrancyEffect jest żywe na urządzeniu iPhone.

+0

Nie, tak też nie było. – MartinHN

+0

Czy możesz udostępnić obraz użyty jako tło? jak obraz z "Host"? – gabbler

+0

Oczywiście: https://www.dropbox.com/sh/52u7vajsrgp6qf3/AAAJP6uepRF9DUV3lyJxuZLaa?dl=0 Tylko dla jasności. Pozostawiam pytanie otwarte, aby umożliwić komuś zdobycie nagrody za pozostałe 3 dni. Rozwiązałem problem, więc jeśli nie polujesz na nagrodę, nie rób tego bez końca. – MartinHN

0

Nie jestem pewien, ale kiedyś var zamiast let się poniżej linii i to pracował dla mnie.

var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 

Może to ci pomoże.

Używałem w ten sposób.

var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 
var vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) 
vibrancyEffectView.frame = view.bounds 
+1

'let' po prostu oznaczy ją jako stałą. Użycie 'var' nie zmieni renderingu. Odkryłem przyczynę problemu, ale pozostawi otwartą nagrodę, dopóki nie wygaśnie, aby ktokolwiek mógł ją złapać z poprawną odpowiedzią. – MartinHN