Voglio sfocare l'intero schermo della mia app iOS, e non posso usare UIBlurEffect
perché voglio essere in grado di controllare la sfocatura. Quindi sto cercando di usare CIGaussianBlur
, ma ho problemi con i bordi dello schermo.Sfocatura gaussiana a schermo intero
mi sto prendendo uno screenshot dello schermo, e quindi eseguire attraverso un CIFilter
con CIGaussianBlur
, convertendo il CIImage
torna a UIImage
, e aggiungendo la nuova immagine sfocata sulla parte superiore dello schermo.
Ecco il mio codice:
let layer = UIApplication.sharedApplication().keyWindow?.layer
UIGraphicsBeginImageContext(view.frame.size)
layer!.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let blurRadius = 5
var ciimage: CIImage = CIImage(image: screenshot)!
var filter: CIFilter = CIFilter(name:"CIGaussianBlur")!
filter.setDefaults()
filter.setValue(ciimage, forKey: kCIInputImageKey)
filter.setValue(blurRadius, forKey: kCIInputRadiusKey)
let ciContext = CIContext(options: nil)
let result = filter.valueForKey(kCIOutputImageKey) as! CIImage!
let cgImage = ciContext.createCGImage(result, fromRect: view.frame)
let finalImage = UIImage(CGImage: cgImage)
let blurImageView = UIImageView(frame: view.frame)
blurImageView.image = finalImage
blurImageView.sizeToFit()
blurImageView.contentMode = .ScaleAspectFit
blurImageView.center = view.center
view.addSubview(blurImageView)
Ecco quello che vedo:
sembra quasi diritto a meno che i bordi. Sembra che la sfocatura stia decollando dal raggio di sfocatura verso il bordo. Ho provato a giocare con le dimensioni del contesto ma non riesco a farlo funzionare.
Come posso rendere la sfocatura fino ai bordi?
Tu Signore, meriti un qualche tipo di risultato per quella risposta .. Ha funzionato come un fascino.! Grazie :) – Wiingaard