Kennt jemand Steuerelemente, die die Unschärfeansichten im iOS7-Stil replizieren?
Ich gehe davon aus, dass es eine Art UIView-Unterklasse geben kann, die das Verhalten repliziert.
Ich spreche von diesen Typansichten, die den Hintergrund extrem stark verwischen, so dass sie Pull-Effekte aus der Hintergrundansicht haben.
Antworten:
Möglicherweise können Sie dazu etwas wie Bin Zhangs RWBlurPopover ändern . Diese Komponente verwendet mein GPUI-Bild, um eine Gaußsche Unschärfe auf darunter liegende Komponenten anzuwenden, aber Sie können genauso gut eine CIGaussianBlur für dieselbe verwenden. GPUImage könnte jedoch ein Haar schneller sein .
Diese Komponente setzt voraus, dass Sie die Ansicht hinter der von Ihnen präsentierten erfassen können, und hat möglicherweise Probleme mit Ansichten, die hinter diesem Inhalt animiert sind. Die Notwendigkeit, eine Reise durch Core Graphics zu unternehmen, um die Hintergrundansicht zu rastern, verlangsamt die Arbeit, sodass wir wahrscheinlich keinen ausreichend direkten Zugriff haben, um dies auf performante Weise für Überlagerungen von animierten Ansichten tun zu können.
Als Update zu den oben genannten Themen habe ich kürzlich die Unschärfen in GPUImage überarbeitet, um variable Radien zu unterstützen, sodass die Unschärfegröße in der Control Center-Ansicht von iOS 7 vollständig repliziert werden kann. Daraus habe ich die GPUImageiOS7BlurFilter-Klasse erstellt, die die richtige Unschärfegröße und Farbkorrektur enthält, die Apple hier anscheinend verwendet. So wird die Unschärfe von GPUImage (rechts) mit der eingebauten Unschärfe (links) verglichen:
Ich verwende ein 4-faches Downsampling / Upsampling, um die Anzahl der Pixel zu reduzieren, über die die Gaußsche Unschärfe arbeiten muss, sodass ein iPhone 4S mit dieser Operation den gesamten Bildschirm in ungefähr 30 ms verwischen kann.
Sie haben immer noch die Herausforderung, Inhalte auf performante Weise aus Ansichten dahinter in diese Unschärfe zu ziehen.
quelle
Ich benutze,
FXBlurView
was unter iOS5 + großartig funktionierthttps://github.com/nicklockwood/FXBlurView
CocoaPods:
Ich habe es hinzugefügt mit:
quelle
FXBlurView
auf ein legte,UIScrollView
bekam ich auch ein verzögertes Ergebnis. Ich glaube, das hat damit zu tun, wie die Unschärfe hinzugefügt wird. Apple greift, wenn ich mich nicht irre, direkt auf die GPU zu, wenn es eine eigene Unschärfe verwendet, was wir als Entwickler nicht tun können. Daher ist die @ cprcrack-Lösung hier tatsächlich die beste Lösung.WARNUNG: In den Kommentaren gab jemand an, dass Apple Apps mit dieser Technik ablehnt. Das ist mir NICHT passiert, sondern nur für Ihre Überlegung.
Dies mag Sie überraschen, aber Sie können eine UIToolbar verwenden , die diesen Standardeffekt bereits enthält (nur iOS 7+). In der Ansicht viewDidLoad des Controllers:
quelle
viewDidLoad
. - (void) viewDidLoad {[super viewDidLoad]; self.view = [[UIToolbar-Zuweisung] initWithFrame: CGRectZero]; } In meinem Fall gestalte ich meine Ansichten programmgesteuert (alter Stil). Ich stimme dieser Lösung zu, da UIToolbar UIView so grundlegend erbt, dass ich in dieser Lösung kein Problem sehe. Ich werde im Laufe der Entwicklung mehr testen und diese Lösung testen.Seit iOS8 können Sie UIBlurEffect verwenden .
Es gibt gute Beispiele für iOS8Sampler mit UIBlurEffect und UIVibrancyEffect .
quelle
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
Der beste neue Weg, um ein verschwommenes Overlay zu erhalten, ist die Verwendung der neuen iOS 8-Funktion UIVisualEffectView.
Der UIBlurEffect unterstützt drei Arten von Stilen. Dunkel, Hell und ExtraLight.
quelle
Sie können eine Klasse mit einer UIToolBar erstellen, die eine Unterklasse von UIView ist, und sie in einem separaten Ansichtscontroller instanziieren. Dieser Ansatz demonstriert eine durchscheinende UIToolBar (von UIView untergeordnet), die Live-Feedback liefert (in diesem Fall für eine AVCaptureSession).
YourUIView.h
YourUIView.m
Nachdem die obige UIView angepasst wurde, erstellen Sie eine Klasse, die eine Unterklasse eines ViewControllers ist. Unten habe ich eine Klasse erstellt, die eine AVCapture-Sitzung verwendet. Sie müssen AVCaptureSession verwenden, um die in Apple integrierte Kamerakonfiguration zu überschreiben. Auf diese Weise können Sie die durchscheinende UIToolBar aus der YourUIView- Klasse überlagern .
YourViewController.h
YourViewController.m
quelle