In Apple's documentation it says this:"This method, though convenient, is inefficient if used multiple times in succession. Achieve better performance by chaining filters without asking for the outputs of individual filters."That confuses me though because I don't know how to link them together without getting the output. For example, this is my method to apply a TiltShift filter, based on the instructions from Apple's docs. When I perform the gradient filter, I have to take the outputImage of that to pass into the next filter. What's the right way to be doing this? override public var outputImage: CIImage? {
guard let inputImage = inputImage else {
return nil
}
let clamped = inputImage.clampedToExtent()
let blurredImage = clamped.applyingGaussianBlur(sigma: inputRadius)
var gradientParameters = [
"inputPoint0": CIVector(x: 0, y: 0.75 * inputImage.extent.height),
"inputColor0": CIColor(red: 0, green: 1, blue: 0, alpha: 1),
"inputPoint1": CIVector(x: 0, y: 0.5 * inputImage.extent.height),
"inputColor1": CIColor(red: 0, green: 1, blue: 0, alpha: 0)
];
guard let gradientImage = ciImage(from: "CILinearGradient", parameters: gradientParameters) else {
return nil
}
gradientParameters["inputPoint0"] = CIVector(x: 0, y: 0.25 * inputImage.extent.height)
guard let backgroundGradientImage = ciImage(from: "CILinearGradient", parameters: gradientParameters) else {
return nil
}
let maskParameters = [
kCIInputImageKey: gradientImage,
kCIInputBackgroundImageKey: backgroundGradientImage
]
guard let maskImage = ciImage(from: "CIAdditionCompositing", parameters: maskParameters) else {
return nil
}
let combinedParameters = [
kCIInputImageKey: blurredImage,
kCIInputBackgroundImageKey: clamped,
kCIInputMaskImageKey: maskImage
]
return ciImage(from: "CIBlendWithMask", parameters: combinedParameters)
}
private func ciImage(from filterName: String, parameters: [String: Any]) -> CIImage? {
guard let filtered = CIFilter(name: filterName, parameters: parameters) else {
return nil
}
return filtered.outputImage
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm trying to wrap my head around Combine still, and so in my class that handles web requests I've written this method:static func downloadNumbersPublisher(datesByType: [LottoType: (start: Date, end: Date)]) -> URLSession.DataTaskPublisher {
guard let url = downloadUrl(using: datesByType) else { return }
var request = URLRequest(url: url)
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")
let session = URLSession(configuration: .ephemeral)
return session.dataTaskPublisher(for: request)
}What I'm not clear on though is what I actually return on line 2, the guard statement.
How do I get errors from the simulator when something is wrong with the pkpass file? I have a 'good' version of my pass.json that drags into the simulator without issues. I have a different version that does nothing, so clearly something is wrong with the JSON, but I can't find what.In the simulator I've done Debug -> Open System Log but when I drag in the bad pkpass file, nothing is displayed.