我在 SCNScene 上有 OverlayPanel SKScene 。此面板包含 SKSpriteNode 的颜色。我不知道如何向面板添加背景模糊效果。
另一个问题:我使用此方法添加面板:
colorPanelScene = SKScene(fileNamed: "art.scnassets/ColorPanelScene")!
SCNsceneView.overlaySKScene = colorPanelScene
SCNsceneView.overlaySKScene!.userInteractionEnabled = true;
这是正确的方法还是我应该将面板创建为单独的UIView (并以简单的方式应用模糊效果)?
答案 0 :(得分:6)
您可以在叠加场景中添加SKEffectsNode
以达到此效果。
但这有点棘手,以你的方式加载它是不够的。
此方法仅适用于静态背景。基本上我们要做的是屏幕截图背景,并将其加载到SKEffectNode
以使其模糊。
在SceneKit编辑器中,向场景中添加一个节点(确保它不是其他节点的子节点),并确保将此节点的类设置为带有名称的SKEffectNode
,我将称之为EffectNode。在设计时,它应该具有最低zPosition
。
然后在代码中,您要执行以下操作:
if let effectNode = colorPanelScene.childNodeWithName("EffectNode") as? SKEffectNode {
let blur = CIFilter(name:"CIGaussianBlur",withInputParameters: ["inputRadius": 10.0]);
effectNode.filter = blur;
effectNode.shouldRasterize = true;
effectNode.shouldEnableEffects = true;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let node = SKSpriteNode(texture:SKTexture(image: image));
effectNode.addChild(node);
}
然后,在SKNode
之上添加另一个SKEffectNode
,但要确保它不是SKEffectNode
的子项。将所有叠加元素放入此SKNode
。
答案 1 :(得分:4)
我会选择UIVisualEffectView
。它具有UIKit和Core Animation人员的所有优秀优化,并且会使您的应用在平台上看起来一致。