我的iPhone 6上出现了不良的活力效果。
它的外观如下:
我检查了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)
}
}
答案 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。