Programmatic "fuzzy" Stil Hintergrund für UIView

8

Natürlich ist es einfach, eine einfache Farbe für einen Hintergrund zu setzen:

Heutzutage ist es üblich, statt "normales Grau" einen "unscharfen" oder "wolkigen" Hintergrund als Designfunktion in Apps zu verwenden.

Zum Beispiel ist hier ein paar "unscharfe" Hintergründe - es ist nur eine einfarbige Farbe mit vielleicht etwas Rauschen und vielleicht verschwimmen.

Sie können Hintergründe ungefähr so ​​sehen, betrachten Sie beliebte Feed-Apps (Whassapp usw.). Es ist eine "Modeerscheinung" unseres Tages.

Es kam mir in den Sinn, es wäre fantastisch, wenn Sie dies in Swift im Code tun könnten

Hinweis: Mit einem PNG zu beginnen ist keine elegante Lösung:

Hoffentlich ist es möglich, alles von Grund auf neu zu programmieren.

Es wäre großartig, wenn der Inspektor einen Schieberegler im IBDesign-Stil hätte, "Add faddish 'körnigen" Hintergrund ... " - Sollte in der neuen Ära möglich sein!

    
Fattie 14.08.2015, 13:01
quelle

6 Antworten

11

Dies wird Sie auf der Grundlage von etwas, das ich vor langer Zeit geschrieben habe, beginnen:

@IBInspectable Eigenschaften:

  • noiseColor : die Rausch- / Kornfarbe, dies gilt für die backgroundColor der Ansicht
  • noiseMinAlpha : das minimale Alpha das randomisierte Rauschen kann
  • sein
  • noiseMaxAlpha : das maximale Alpha das randomisierte Rauschen kann
  • sein
  • noisePasses : Wie oft das Rauschen angewendet wird, mehr Pässe sind langsamer, können aber zu einem besseren Rausch-Effekt führen
  • noiseSpacing : Wie häufig das Zufallsrauschen auftritt, bedeutet ein höherer Abstand, dass das Rauschen weniger häufig auftritt

Erläuterung:

Wenn sich eine der konfigurierbaren Rauscheigenschaften ändert, wird die Ansicht zum Neuzeichnen markiert. In der Zeichenfunktion wird UIImage generiert (oder von NSCache falls verfügbar).

Bei der Erzeugungsmethode wird jedes Pixel iteriert, und wenn das Pixel Rauschen sein sollte (abhängig vom Abstandsparameter), wird die Rauschfarbe mit einem zufälligen Alpha-Kanal angewendet. Dies geschieht so oft wie die Anzahl der Durchgänge.

.

%Vor%     
SomeGuy 01.10.2015, 14:30
quelle
2

in Swift 3

%Vor%     
Wan Mook Kang 20.02.2017 03:28
quelle
1

Während die Frage nach einer "programmatischen" Lösung fragt, fällt mir ein, dass das, was Sie versuchen und als "unscharf" bezeichnen, viel Ähnlichkeit mit UIBlurEffect , UIVisualEffectView und UIVibrancyEffect hat, die eingeführt wurden iOS 8.

Um diese zu verwenden, können Sie UIVisualEffectView in Ihre Storyboard-Szene ziehen, um einen bestimmten Bereich des Bildschirms mit einem Unschärfe- oder Vibrations-Effekt zu versehen.

Wenn Sie möchten, dass eine ganze Szene mit dem visuellen Effekt über der vorherigen Szene erscheint, sollten Sie Folgendes konfigurieren:

  1. Legen Sie entweder den View Controller oder den Präsentationsabschnitt auf Presentation = Over Current Context fest und machen Sie die Hintergrundfarbe des "fuzzy"

  1. Setzen Sie die Hintergrundfarbe des präsentierten View-Controllers auf clearColor .

  2. Betten Sie den gesamten Inhalt des dargestellten View-Controllers in ein UIVisualEffectView

  3. ein

Damit können Sie Effekte wie folgt erhalten:

    
Eneko Alonso 01.10.2015 02:08
quelle
1

Mit GPUImage können Sie leicht etwas aufbauen. Es kommt mit einer großen Menge von Unschärfen, Rauschgeneratoren und Filtern. Sie können sie nacheinander verbinden und komplexe GPU beschleunigte Effekte aufbauen.

Um Ihnen einen guten Startpunkt zu geben. Hier ist ein kurzer schmutziger Prototyp einer Funktion, die GPUImage verwendet, um etwas zu tun, was Sie wollen. Wenn Sie 'orUseNoise' auf YES setzen, wird ein unscharfes Bild auf der Grundlage von Perlin-Rauschen anstelle des Bildes erzeugt. Ändern Sie die angezeigten Werte, um den gewünschten Effekt zu ändern.

%Vor%

Dies ist ein einfacher Stapel von:

  

GPUImagePicture - & gt; GPUImagePerlinNoiseFilter - & gt; GPUImageGaussianBlurFilter

.. mit ein wenig Bearbeitungscode, um ein Bild richtig zu machen.

Sie können versuchen, den Stapel zu ändern, um einige der vielen anderen Filter zu verwenden.

HINWEIS: Auch wenn Sie das Rauschen anstelle des Bildes verwenden. Sie müssen weiterhin ein Bild bereitstellen, bis Sie das Teil ausgeschnitten haben.

    
Andres Canella 30.09.2015 03:27
quelle
1

Wir verwenden eine großartige Komponente KGNoise . Es ist wirklich einfach zu bedienen. Ich denke, es kann dir helfen.

KGNoise erzeugt zufällige schwarze und weiße Pixel in einem statischen 128x128 Bild, das dann gekachelt wird, um den Raum zu füllen. Die zufälligen Pixel werden mit einem Wert versehen, der so gewählt wurde, dass er am zufälligsten aussieht. Dies bedeutet auch, dass das Rauschen zwischen App-Starts konsistent aussieht.

    
Alexey Kubas 29.09.2015 15:43
quelle
1

Ich stimme der Antwort zu GPUImage zu und da Sie kein Bild bereitstellen möchten, könnten Sie ein leeres Bild wie folgt erstellen:

%Vor%

Der Hauptvorteil der Verwendung von GPUImage ist die Geschwindigkeit.

    
John Tracid 03.10.2015 13:01
quelle