【发布时间】:2014-09-18 18:16:48
【问题描述】:
我正在编写一个 SpriteKit 游戏,但遇到了 SKView 上的视图模糊问题。它应该在游戏暂停时从右侧滑动,并且它应该模糊其父视图 (SKView) 的内容,就像 iOS 7 中的控制中心面板一样。这是所需的外观:
我实际得到的是:
事实上,左边的视图并不是全黑的,你可以看到超视图的高光在几乎不透明的子视图中略微挣扎,但没有应用模糊。这是 iOS 8 的错误/功能,还是我的错误/误解
这是我的 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(视图:SKView)中:
view.addSubview(optionsView)
按下暂停键:
self.optionsView.show()
附:虽然我知道另外两种实现模糊视图的方法,但我认为这是最简单的一种,因为我的应用程序将仅支持 iOS8
从 superview 渲染一个模糊的静态图像 -> 将 UIImageView 放在 OptionsView 上,使用 clipsToBounds = true -> 在为 optionsView 位置设置动画时为 UIImageView 位置设置动画,以便模糊相对于超级视图保持静止
忘记 UIView、UIVisualEffectView 和 UIBlurView,将 SKEffectNode 与 SKCropNode 一起使用。
【问题讨论】:
-
sprite kit view不受uiview视觉效果影响,因为sk使用不同的渲染路径,在skview上使用effectnode效果
-
您也可以对SKView进行快照并将其放置为图像视图以能够显示此效果。
-
是的,这正是我在 P.S. 中的意思。 #1
标签: ios sprite-kit blur skview