Sto provando a creare un sottoporta UIView
con un UIBlurEffect
come effetto. La vista viene creata dal lato dello schermo e viene quindi inserita utilizzando un'animazione.UIBlurEffect non sfocatura sul dispositivo ma funziona nel simulatore
Tutto funziona perfettamente sul simulatore (ho provato su un iPhone 4S e un iPhone 6) tuttavia sul mio telefono (iPhone 6) la sfocatura non è sfocata, sembra più un grigio scuro con un alpha
di 0,5. Inoltre, quando faccio uno screenshot del dispositivo o lo apro dalla schermata Home, la sfocatura viene renderizzata per quel singolo fotogramma prima che il rendering coerente ricominci.
Ecco una schermata di visualizzazione come è al momento:
Tuttavia sul dispositivo sfocatura non c'è, è essenzialmente solo una vista trasparente scuro.
Ecco il codice che uso per inizializzare la vista, le proprietà blurView
e vibrancyView
sono dichiarate come variabili globali:
init(left: Bool){
self.left = left
let screenSize = UIScreen.mainScreen().bounds.size
var rect: CGRect
if left{
rect = CGRectMake(-screenSize.width*0.3, 0, screenSize.width*0.3, screenSize.height)
}else{
rect = CGRectMake(screenSize.width, 0, screenSize.width*0.3, screenSize.height)
}
super.init(frame: rect)
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = CGRectMake(0, 0, self.frame.width, self.frame.height)
self.addSubview(blurView)
let vibrancy = UIVibrancyEffect(forBlurEffect: blurEffect)
vibrancyView = UIVisualEffectView(effect: vibrancy)
vibrancyView.frame = blurView.frame
blurView.addSubview(vibrancyView)
self.userInteractionEnabled = true
}
e per spostare il Superview, che contiene il blurView, in:
func moveIn(){
UIView.animateWithDuration(0.3, animations: {() -> Void in
var center = self.center
if self.left{
center.x = UIScreen.mainScreen().bounds.size.width*0.15
}else{
center.x = UIScreen.mainScreen().bounds.size.width*0.85
}
self.center = center
})
}
Come ho detto prima dell'animazione e funziona bene ma la sfocatura non sfoca.
Non sono sicuro di cosa stia succedendo, mi fa pensare che abbia qualcosa a che fare con il rendering dei fotogrammi ma non sono un guru quindi se qualcuno ha qualche idea sarei più che grato.
Hai un collegamento che lo spiega? Ho appena colpito questo problema me stesso. – RSully
Niente da Apple direttamente, ho appena visto un commento da Cocos2D su un'altra domanda simile parlando del percorso di rendering per SKViews e di come è diverso rispetto al tuo UIView di base, e tutto ciò che ho visto sembra sostenere quell'idea. Francamente sto ancora cercando una soluzione di qualche tipo con schermate e varie tecniche di sfocatura, ma nulla si avvicina davvero. Sono tentato di vedere se Apple ha qualcosa da dire al riguardo. –
In realtà, sono riuscito a utilizzare UIVisualEffectView per rendere sfocata una SKView sul dispositivo. Mi è bastato un po 'di ristrutturazione della mia gerarchia di vista. Ha funzionato quando sia il mio SKView che UIVisualEffectView erano subviews diretti dello stesso contenitore UIView. – RSully