在iOS7上将CIFilter应用于SKEffectNode

时间:2014-12-19 23:31:52

标签: ios swift sprite-kit cifilter

在Swift中使用SpriteKit,我在GameScene(SKScene)中有这个代码:

//Init function
let self.itemsLayer = SKNode()

let grayNode = SKEffectNode()
let grayFilter = CIFilter(name: "CIPhotoEffectNoir")
grayFilter.setDefaults()
grayNode.filter = grayFilter
grayNode.addChild(self.itemsLayer)

self.addChild(grayNode)

应该将我显示的项目呈现为带有灰色的itemsLayer(稍后在代码中我将带有​​纹理/图像的SKSpriteNode添加到itemsLayer中)。

在iOS8上,它完美运行:我可以看到我的所有物品都是灰色的。

但是在iOS7上,SKSpriteNodes(我在itemsLayer上的项目)不会显示(就像隐藏一样)。

根据文档和filterNamesInCategory("CICategoryColorEffect"),iOS7确实存在CIPhotoEffectNoir。

修改:当我评论过滤行时,我的itemsLayer仍然是隐藏的。当我将let grayNode转换为SKNode时,它会返回(但当然不会产生任何效果)。问题似乎来自grayNode为SKEffectNode

1 个答案:

答案 0 :(得分:0)

经过数小时的调试后,我意识到iOS7不会像iOS8一样呈现SKEffectNode

在iOS7中,将SKEffectNode添加到一堆SKSpriteNode图层将自动将其置于最前层(SKSpriteNode就是这种情况)。

所以我只需要添加一行:

grayNode.zPosition = 10 //Or any number > 1