使用UIVisualEffectView创建模糊视图,在模拟器上正确但在iPhone和iPad上不正确

4
目标:在应用程序中创建模糊视图。
我使用的代码如下:
func createBlurBackgroundView() 
{
    if !UIAccessibilityIsReduceTransparencyEnabled() 
    {
        if blurredSubView == nil || blurredSubView.superview == nil 
        {
            print("Create blurred background view")
            self.backgroundColor = UIColor.clearColor()
            let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
            blurredSubView = UIVisualEffectView(effect: blurEffect)
            blurredSubView.frame = self.bounds
            self.insertSubview(blurredSubView, atIndex: 0)
        }
    }
    else 
    {
        print("Transparency disabled!! no blur view")
    }
}

结果: 模拟器上一切正常:

enter image description here

但是当我在iPhone和iPad上运行它时,它看起来像这样:enter image description here

请注意,我没有更改“减少透明度”设置!

然后,当我想要拍摄这个没有模糊的黑色背景的快照时,你猜怎么着?在照片流中,我看到了完全正确的模糊视图图片...

另外,当我双击主屏幕按钮并查看多任务界面时,我看到了模糊视图效果!

enter image description here

更多信息: 我使用的是iPhone 6s、iPad Air 2,都是iOS 9.3.1 Xcode版本7.3

我已经非常努力地尝试解决这个问题了,我试过其他方法,比如拍摄快照图像,然后在图像上应用模糊效果,但还有其他缺陷和问题。


你有检查 UIAccessibilityIsReduceTransparencyEnabled() 返回了什么吗? - Jelly
@Jelly 一般来说,有着彩色形状,就像你在第一张图片中看到的那样。我真的怀疑问题不是一个简单的错误,比如忘记添加一些视图。顺便说一下,底层视图是一个skscene,这应该不是问题,因为当我切换到多任务界面或截屏时,我可以看到模糊的视图。所以它必须在那里!但为什么我一开始看不到呢? - Valar Morghulis
1
如果您不使用自动布局(如果使用,则必须确保子视图随其父视图的大小更新)或其他图形工具(如SpriteKit,其中模糊效果无法正常工作),除了UIKit之外,它应该可以正常工作。 - Jelly
1
我复制了您的代码,并将self.background属性从clearColor更改为我自己的图案颜色。在iPhone 6上运行良好。 - Satachito
2
如果你使用Sprite Kit,那很可能就是原因。不要期望它能与Sprite Kit兼容。 - Jelly
显示剩余8条评论
2个回答

4

UIVisualEffectViewSpriteKit 不兼容。我不知道它们在后台做了什么不同的事情,如果有人知道,请随意编辑答案。我的猜测是底层实现使用了不同的 API,这些 API 不起作用。模拟器会进行各种技巧来模拟实际设备,因此它们可能在后台使用了与真实设备不同的技术,这就是为什么它可以在模拟器上运行。


-1

从你的代码中移除这一行

self.backgroundColor = UIColor.clearColor()

不相关... - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接