2015-03-07 15 views
8

Tôi đang gặp render kém của hiệu ứng sống động trên iPhone của tôi 6.UIVibrancyEffect mờ trên thiết bị, rực rỡ trong Simulator

Đây là cách nó trông: simulator vs. device

Tôi đã kiểm tra giá trị của UIAccessibilityIsReduceTransparencyEnabled() và nó trả về false trên cả hai thiết bị và trong trình mô phỏng.

Mã cho hình nền, các hiệu ứng và một containerView mà tôi thêm mỗi yếu tố khác để trông như sau:

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

Trả lời

3

Có thể là UIAccessibilityDarkerSystemColorsEnabled() trả về true cho iPhone 6 hoặc iPhone 6 plus của bạn, vì vậy nó xuất hiện tối hơn.

Để tắt tính năng này, hãy đi tới Cài đặt -> Chung -> Trợ năng -> Tăng độ tương phản -> Màu tối, tắt nó sẽ hoạt động.

Sửa

Như đã nêu trong tài liệu UIVibrancyEffect.

Hiệu ứng rung phụ thuộc màu sắc. Bất kỳ bản xem phụ nào bạn thêm vào contentView phải triển khai phương pháp tintColorDidChange và tự động cập nhật . Các đối tượng UIImageView có hình ảnh có chế độ hiển thị UIImageRenderingModeAlwaysTemplate cũng như Các đối tượng UILabel sẽ tự động cập nhật.

Chúng tôi nên sử dụng hình ảnh có chế độ hiển thị là UIImageRenderingModeAlwaysTemplate để tự động cập nhật đối tượng UIImageView. Áp dụng điều này làm cho thiết bị iPhone hoạt động ở mức UIVibrancyEffect.

+0

Không, đó cũng không phải như vậy. – MartinHN

+0

Bạn có thể chia sẻ hình ảnh bạn đã sử dụng làm nền không? giống như hình ảnh với "Host"? – gabbler

+0

Chắc chắn: https://www.dropbox.com/sh/52u7vajsrgp6qf3/AAAJP6uepRF9DUV3lyJxuZLaa?dl=0 Chỉ cần rõ ràng. Tôi đang giữ câu hỏi mở để cho phép ai đó lấy tiền thưởng trong 3 ngày còn lại. Tôi giải quyết vấn đề, vì vậy, trừ khi bạn đang săn tiền thưởng không đi qua và về cho nó. – MartinHN

0

Tôi không chắc chắn nhưng tôi sử dụng var thay vì let ở dòng dưới đây và nó đã làm việc cho tôi.

var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 

Có thể điều này sẽ giúp bạn.

Tôi đã sử dụng như thế này.

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

'let' sẽ chỉ đánh dấu nó là hằng số. Sử dụng 'var' sẽ không thay đổi kết xuất. Tôi đã phát hiện ra nguyên nhân gây ra vấn đề, nhưng sẽ để lại tiền thưởng mở cho đến khi nó hết hạn cho bất cứ ai để lấy câu trả lời đúng. – MartinHN

0

Sử dụng RGB chung, không phải sRGB hoặc thiết bị RGB.

Các vấn đề liên quan