2015-03-07 10 views
8

Ich erlebe eine schlechte Wiedergabe von Lebhaftigkeit Wirkung auf meinem iPhone 6.UIVibrancyEffect auf dem Gerät gedimmt, vibrierend in Simulator

Dies ist, wie es aussieht: simulator vs. device

Ich habe den Wert von UIAccessibilityIsReduceTransparencyEnabled() geprüft und Es gibt sowohl auf dem Gerät als auch im Simulator einen Fehler zurück.

Der Code für das Hintergrundbild, die Effekte und eine containerView, dass ich alle anderen Elemente wie folgt aussieht hinzu:

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) 
    } 
} 

Antwort

3

Es ist vielleicht, dass UIAccessibilityDarkerSystemColorsEnabled() wahre Rendite für Ihr iPhone 6 oder iPhone 6 plus, so dass es dunkler erscheint.

Um es zu deaktivieren, gehen Sie zu Einstellungen -> Allgemein -> Zugänglichkeit -> Kontrast erhöhen -> Farben verdunkeln, deaktivieren Sie es sollte funktionieren.

bearbeiten

Wie UIVibrancyEffect im Dokument angegeben.

Der Vibrations-Effekt ist farbabhängig. Alle Subviews, die Sie zu the contentView hinzufügen, müssen die tintColorDidChange-Methode implementieren und müssen sich entsprechend aktualisieren. UIImageView-Objekte mit Bildern, die haben, haben einen Rendering-Modus von UIImageRenderingModeAlwaysTemplate sowie UILabel-Objekte werden automatisch aktualisiert.

Wir Bilder mit einem Rendering-Modus von UIImageRenderingModeAlwaysTemplate verwenden sollten UIImageView Objekte automatisch aktualisiert zu machen. Durch die Anwendung wird das UIVibrancyEffect auf dem iPhone vibrieren.

+0

Nein, das war auch nicht der Fall. – MartinHN

+0

Können Sie das Bild teilen, das Sie als Hintergrund verwendet haben? wie das Bild mit "Host"? – gabbler

+0

Sicher: https://www.dropbox.com/sh/52u7vajsrgp6qf3/AAJP6uepRF9DUV3lyJxuZLaa?dl=0 Nur um klar zu sein. Ich halte die Frage offen, damit jemand in den verbleibenden drei Tagen das Kopfgeld ergattern kann. Ich habe das Problem gelöst, also wenn du nicht auf die Kopfgeldjagd gehst, geh nicht hin und her. – MartinHN

0

Ich bin nicht sicher, aber ich benutzen var statt let in folgenden Linien und hat für mich gearbeitet.

var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 

Vielleicht hilft Ihnen dies.

Ich habe so verwendet.

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

'Let' wird nur als Konstante markieren. Mit 'var' wird das Rendering nicht geändert. Ich habe herausgefunden, was das Problem verursacht hat, lasse aber das Kopfgeld offen, bis es abläuft, damit jeder mit der richtigen Antwort greifen kann. – MartinHN

0

Verwenden Sie generisches RGB, nicht sRGB oder RGB-Gerät.

Verwandte Themen