UIVibrancyEffect在设备上变暗,在模拟器中充满活力

时间:2015-03-07 11:30:28

标签: ios iphone swift ios8

我的iPhone 6上出现了不良的活力效果。

它的外观如下: simulator vs. device

我检查了UIAccessibilityIsReduceTransparencyEnabled()的值,它在设备和模拟器中都返回false。

背景图片的代码,效果和我将其他所有元素添加到的容器视图如下所示:

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

3 个答案:

答案 0 :(得分:3)

对于iPhone 6或iPhone 6 plus,UIAccessibilityDarkerSystemColorsEnabled()可能会返回true,因此它看起来更暗。

要禁用它,请转到设置 - >一般 - >辅助功能 - >增加对比度 - >变暗颜色,切换它应该工作。

修改

正如文件UIVibrancyEffect中所述。

  

活力效果取决于颜色。您添加到的所有子视图   contentView必须实现tintColorDidChange方法和   相应地更新自己。具有图像的UIImageView对象   具有UIImageRenderingModeAlwaysTemplate的渲染模式以及   UILabel对象将自动更新。

我们应该使用渲染模式为UIImageRenderingModeAlwaysTemplate的图片来自动更新UIImageView个对象。应用此功能可使iPhone设备上的UIVibrancyEffect充满活力。

答案 1 :(得分:0)

我不确定,但我在下面的行中使用了var代替let,这对我有用。

var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect)

可能会对你有帮助。

我是这样使用的。

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

答案 2 :(得分:0)

使用通用RGB,而不是sRGB或设备RGB。