2015-06-26 8 views
7

Ich habe eine bestimmte App, die aufgrund der Navigationsstruktur keine normalen UINavigationBars mit Transluzenz verwenden kann, also habe ich mich entschieden, iOS8s UIVisualEffectView mit zu verwenden Verwischen.So minimieren Sie das visuelle Flackern mit iOS8 "UIVisualEffectView with Blur"

Diese Lösung funktioniert meistens, aber es gibt einen sehr auffälligen Flimmereffekt, der auftritt, wenn die UITableView unter dieser Unschärfeansicht gescrollt wird. Wenn die Kanten eines Bilds oder eines farbigen Rechtecks ​​unter der Unschärfeansicht verlaufen, tritt ein erhebliches Flackern auf.

Hat jemand das erlebt? Weiß jemand, wie man dieses Problem löst?

Meine Implementierung ist einfach, ich zog eine UIVisualEffectView auf meinen View Controller und beschränkte sie auf obere, linke und rechte Bildschirmgrenzen und fügte eine Höhenzwangsbeschränkung von 64 hinzu. Darunter ist nur eine UITableView mit einigen Bildern und Text.

+0

Unschärfe ist rechenintensiv. Es ist wahrscheinlich nicht für so etwas gedacht. Das Flackern ist wahrscheinlich auf die Verzögerung während der Berechnung zurückzuführen. – matt

+0

Danke für die Eingabe, Matt - Sie denken, dass UIVisualEffectView nur für statische (ohne Bewegung) Unschärfe gedacht war? – Adama

+0

Ohne eine Bewegung, würde ich sagen. – matt

Antwort

1

„Ich gehe davon aus, dass, was nicht unter der Ansicht ist nicht berücksichtigt werden, um die Unschärfe zu berechnen. Es wird wahrscheinlich hochgerechnet wird (durch die Bildauffüllverfahrens durch Spiegelung, Replikation Verpackung, etc ... wie Sie tun würden minimieren Randeffekte auf jeder Faltung). Aber das schafft einen unerwünschten visuellen Sprung in vielen Fällen.

Wenn Sie diesen Artefakt minimieren wollen, machen nur die UIVisualEffectView größer als Ihre Ansicht. einige Pixel ausreichen, der unscharfe Kernel ist sowieso nicht so groß. Und mach deine Sicht auf Clip in Grenzen. "

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

Dieser arbeitete für mich, zumindest eliminiert den Boden in der Bar Navigation flackern. Es funktionierte jedoch nicht an der Spitze. Ich glaube, das liegt daran, (vielleicht UIWindow?) Clipping gegen - in meinem Fall - die TableView.

UPDATE: Es scheint, dass der Fehler in iOS 9.0 und höher behoben ist.

+0

Sieht aus wie dies die einzige Möglichkeit ist, das Problem auf iOS 8 zu beheben. Zumindest, um es zu minimieren. –

+0

Hat jemand experimentiert mit, wie viel es zu pad? Oder wissen wie groß der Kernel ist? –

0

Ich mache eine uiview, die Alpha ist 0 und fügen Sie blurview als Subview davon. So kann ich das flackernde Problem minimieren, kann es auch mit Animation verstecken/anzeigen oder Ecken abrunden.