使用 UIVisualEffectView 创建模糊视图,在模拟器上更正但在 iphone & ipad 上不正确
use UIVisualEffectView to create a blur view, correct on simulator but not on iphone & ipad
目标:在应用中创建模糊视图。
我使用的代码:
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")
}
}
结果:
在模拟器上一切正常:
但是当我在 iphone 和 ipad 上 运行 时,它看起来像:
请注意我没有更改 "REDUCE TRANSPARENCY" 设置!
然后当我想拍一张没有模糊的黑色背景的快照时,你猜怎么着?!在照片流中,我看到了正确的模糊视图图片...
还有,当我双击home键,看多任务界面时,我看到了模糊视图效果!
更多信息:
我用的是iphone6s,ipadair2,都是iOS9.3.1
Xcode 版本 7.3
我已经厌倦了尝试解决这个问题,我尝试了其他方法,例如拍摄快照图像,然后对图像应用模糊效果,但还有其他错误和其他缺点
删除代码中的这一行
self.backgroundColor = UIColor.clearColor()
UIVisualEffectView
不适用于 SpriteKit
。我不知道他们在后面做了什么不同的事情,如果有人知道请随时编辑答案。我的猜测是底层实现使用不同的 API,这些 API 不能一起工作。模拟器会执行各种技巧来模拟实际设备,因此它们可能在后面使用与真实设备不同的东西,这就是它在模拟器上运行的原因。
目标:在应用中创建模糊视图。
我使用的代码:
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")
}
}
结果: 在模拟器上一切正常:
但是当我在 iphone 和 ipad 上 运行 时,它看起来像:
请注意我没有更改 "REDUCE TRANSPARENCY" 设置!
然后当我想拍一张没有模糊的黑色背景的快照时,你猜怎么着?!在照片流中,我看到了正确的模糊视图图片...
还有,当我双击home键,看多任务界面时,我看到了模糊视图效果!
更多信息: 我用的是iphone6s,ipadair2,都是iOS9.3.1 Xcode 版本 7.3
我已经厌倦了尝试解决这个问题,我尝试了其他方法,例如拍摄快照图像,然后对图像应用模糊效果,但还有其他错误和其他缺点
删除代码中的这一行
self.backgroundColor = UIColor.clearColor()
UIVisualEffectView
不适用于 SpriteKit
。我不知道他们在后面做了什么不同的事情,如果有人知道请随时编辑答案。我的猜测是底层实现使用不同的 API,这些 API 不能一起工作。模拟器会执行各种技巧来模拟实际设备,因此它们可能在后面使用与真实设备不同的东西,这就是它在模拟器上运行的原因。