我正在编写一个SpriteKit游戏,遇到了模糊视图的问题,它位于SKView上。当游戏暂停时,它应该从右侧滑入并模糊其父视图(SKView)的内容,就像iOS 7中的控制中心面板一样。这是期望的外观:
但我实际得到的是:
实际情况是,左侧的视图并不是完全黑色的,你可以看到父视图的高亮部分在几乎不透明的子视图中稍微闪烁,但没有应用任何模糊效果。这是iOS 8的bug/特性,还是我的错误/误解呢?
这是我的UIVisualEffectView子类的要点:
然后在GameScene类中: 在初始化器中:
![enter image description here](https://istack.dev59.com/ttcGi.webp)
![enter image description here](https://istack.dev59.com/fUruR.webp)
这是我的UIVisualEffectView子类的要点:
class OptionsView: UIVisualEffectView {
//...
init(size: CGSize) {
buttons = [UIButton]()
super.init(effect: UIBlurEffect(style: .Dark))
frame = CGRectMake(-size.width, 0, size.width, size.height)
addButtons()
clipsToBounds = true
}
func show() {
UIView.animateWithDuration(0.3, animations: {
self.frame.origin.x = 0
})
}
func hide() {
UIView.animateWithDuration(0.3, animations: {
self.frame.origin.x = -self.frame.size.width
})
}
然后在GameScene类中: 在初始化器中:
optionsView = OptionsView(size: CGSizeMake(130, size.height))
在didMoveToView(view: SKView)方法中:
view.addSubview(optionsView)
按下暂停按钮:
self.optionsView.show()
附言:虽然我知道另外两种实现模糊视图的方法,但我认为这种方法是最简单的,因为我的应用程序只支持iOS8。
从父视图中渲染出一张模糊的静态图片 -> 在OptionsView上放置UIImageView,并将clipsToBounds设置为true -> 在动画OptionsView的位置时同时动画UIImageView的位置,以使模糊相对于父视图保持不动
忘记UIView、UIVisualEffectView和UIBlurView,使用SKEffectNode和SKCropNode一起使用。