ios - UIBlurEffect 在设备上不模糊但在模拟器中有效

标签 ios iphone swift uiview uivisualeffectview

我正在尝试制作一个带有 UIVisualEffectView subview 的 UIView,并以 UIBlurEffect 作为效果。 View 在屏幕的一侧创建,然后使用动画滑入。

在模拟器上一切正常(我已经在 iPhone 4S 和 iPhone 6 上测试过)但是在我的手机(iPhone 6)上模糊并没有模糊,它看起来更像是带有 alpha 为 0.5。此外,当我截取设备的屏幕截图或从主屏幕打开它时,会在再次开始一致渲染之前为该单帧渲染模糊。

这是当前 View 的屏幕截图: enter image description here

但是在设备上不存在模糊,它本质上只是一个黑暗、透明的 View 。

这是我用来初始化 View 的代码,blurViewvibrancyView 属性被声明为全局变量:

init(left: Bool){
    self.left = left
    let screenSize = UIScreen.mainScreen().bounds.size

    var rect: CGRect
    if left{
        rect = CGRectMake(-screenSize.width*0.3, 0, screenSize.width*0.3, screenSize.height)
    }else{
        rect = CGRectMake(screenSize.width, 0, screenSize.width*0.3, screenSize.height)
    }

    super.init(frame: rect)
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
    blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame = CGRectMake(0, 0, self.frame.width, self.frame.height)
    self.addSubview(blurView)
    let vibrancy = UIVibrancyEffect(forBlurEffect: blurEffect)
    vibrancyView = UIVisualEffectView(effect: vibrancy)
    vibrancyView.frame = blurView.frame
    blurView.addSubview(vibrancyView)

    self.userInteractionEnabled = true
}

然后将包含 blurView 的 superView 移动到:

func moveIn(){
    UIView.animateWithDuration(0.3, animations: { () -> Void in
        var center = self.center
        if self.left{
            center.x = UIScreen.mainScreen().bounds.size.width*0.15
        }else{
            center.x = UIScreen.mainScreen().bounds.size.width*0.85
        }
        self.center = center
    })
}

正如我之前所说,动画等效果很好,但 blurView 不会模糊。

我不确定这是怎么回事,这让我觉得这与渲染帧有关,但我不是大师,所以如果有人有任何想法,我将不胜感激。

最佳答案

为了解决这个问题,这是因为我在大部分应用程序中使用 SpriteKit,因此使用 SKView 而不是 UIView。我意识到我没有在问题中提到这一点,但我不知道这会成为一个问题。显然 SKView 遵循不同的渲染路径,因此不会变得模糊,建议的方法是 effectnode。

关于ios - UIBlurEffect 在设备上不模糊但在模拟器中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202433/

相关文章:

ios - 动态单元格高度 iOS

iOS:调用popViewControllerAnimated 后的回调函数?

ios - 相同的表达式在 Objective-C 和 Swift 中返回不同的值

iphone - 游戏中心细节

xcode - 如何使用 Swift for OS X 创建多页面应用程序?

swift - 完美服务器 HTTP - 找不到文件

ios - 许多图像请求后 PHImageManager 崩溃

ios - NSData contentsOfUrl 返回 nil

android - PhoneGap 能否将我的基于 Web 的应用程序显示为嵌入式浏览器?

iphone - NSTimer 未运行