在 iOS 上,您可以向 SKEffectsNode
添加多个 CIFilter
吗?
CIFilterGenerator
似乎是我想要的,但它在 iOS 上不可用。
我知道你可以使用multiple filters on an image通过将一个的输出作为下一个的输入传递,但如果您想影响非图像节点,这没有帮助。
这是否意味着我必须创建一个 SKEffectNode
的人工层次结构,并向每个层次结构添加一个过滤器,而我的实际内容位于最底部?有更好的办法吗?
最佳答案
根据 dfd 的有用建议,我最终选择了这个简单的子类。我将他的答案标记为正确,因为 a) 他建议了这种方法,我想给予他信任,b) 它有更多关于使用 CIFilterConstructor 注册过滤器的一般使用信息。
有用的引用: -Apple Docs -Related Question -Free Core Image eBook
class MyChainFilter: CIFilter {
let chainedFilters: [CIFilter]
@objc dynamic var inputImage: CIImage?
init(filters: [CIFilter]) {
self.chainedFilters = filters
super.init()
}
// run filters in order on the specified source image
override var outputImage: CIImage? {
get {
let imageKey = "inputImage"
var workingImage = self.inputImage
for filter in chainedFilters {
assert(filter.inputKeys.contains(imageKey))
filter.setValue(workingImage, forKey: imageKey)
guard let result = filter.outputImage else {
assertionFailure("filter failed: \(filter.name)")
return nil
}
workingImage = result
}
return workingImage
}
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
关于ios - 在 iOS 上,可以将多个 CIFilter 添加到 SpriteKit 节点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553869/