2015-06-26 9 views
7

Ho una app particolare che, a causa della struttura di navigazione, non mi consente di utilizzare le normali UINavigationBars con traslucenza, quindi ho scelto di provare a utilizzare UIVisualEffectView di iOS8 con blur.Come ridurre al minimo lo sfarfallio visivo con iOS8 "UIVisualEffectView with Blur"

Questa soluzione funziona principalmente, ma c'è un effetto sfarfallio molto evidente che si verifica quando l'UITableView sotto questa vista sfocatura viene fatto scorrere. Quando i bordi di un'immagine o di un rect colorato passano sotto la vista sfocata, si verifica una quantità significativa di sfarfallio.

Qualcuno ha provato questo? Qualcuno sa come risolvere questo problema?

mia implementazione è semplice, ho trascinato un'UIVisualEffectView sul mio controller della vista e costretto ad alto, a sinistra, e limiti dello schermo a destra, e ha aggiunto un vincolo di altezza di 64. Sotto questo è solo un UITableView con alcune immagini e testo.

+0

La sfocatura è intensiva di calcolo. Probabilmente non è pensato per questo genere di cose. Lo sfarfallio è probabilmente causato dal ritardo durante l'esecuzione del calcolo. – matt

+0

Grazie per l'input, Matt - quindi pensi che UIVisualEffectView fosse inteso solo per l'offuscamento statico (senza movimento)? – Adama

+0

Senza uno spostamento di movimento, direi. – matt

risposta

1

"Suppongo che ciò che non è sotto la vista non viene preso in considerazione per calcolare la sfocatura. E 'probabile essere estrapolata (da imbottitura l'immagine di mirroring, replicando, confezionamento, ecc ... come si fa a minimizzare gli effetti di contorno su qualsiasi convoluzione). Ma questo crea un salto visivo indesiderato in molti casi.

Se si vuole ridurre al minimo questo artefatto, solo fare il UIVisualEffectView più grande della vostra vista. pochi pixel basteranno, il blurring kernel non è così grande in ogni caso e rendi il tuo punto di vista per bloccare i limiti . "

Riferimento: https://medium.com/@imho_ios/avoid-artifacts-on-uiblureffect-edges-c30e737c21fb

Questo ha funzionato per me, almeno eliminato il fondo sfarfallio della barra di navigazione. Tuttavia, non ha funzionato in alto. Credo che sia dovuto alla visualizzazione (forse UIWindow?) Del clipping contro - nel mio caso - il TableView.

UPDATE: Sembra che il bug sia stato risolto in iOS 9.0 e versioni successive.

+0

Sembra che questo sia l'unico modo per risolvere il problema su iOS 8. Almeno per ridurlo al minimo. –

+0

Qualcuno ha sperimentato quanto assorbirlo? O sai quanto è grande il kernel? –

0

Rendo uniview quale alfa è 0 e aggiungo blurview come sottomenu di quello. Quindi posso minimizzare che il problema di sfarfallio può anche nascondere/mostrare o arrotondare gli angoli con l'animazione.