Ich versuche, einen Controller zu erstellen, der dem Control Center in iOS7 ähnlich ist. Von der WWDC-Sitzung Nr. 226 habe ich gelernt, wie man mit verschiedenen Effekten unscharfes Bild bekommt
UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);
[view drawViewHierarchyInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lightImage = [newImage applyLightEffect];
Mit anderen Worten, wir erfassen einfach ein Bild (machen Sie einen Screenshot), führen einen Unschärfe-Effekt aus und verwenden dieses unscharfe Bild für unsere Bedürfnisse.
Wenn Sie Control Center über dynamischen Inhalten öffnen, werden Sie feststellen, dass sich der unscharfe Hintergrund des Control Centers ebenso ändert wie der Inhalt.
Weiß jemand, wie man dieses Verhalten replizieren kann?
Die einzige Möglichkeit, die ich sehe, besteht darin, Inhalte zu erfassen und mit einem bestimmten Intervall (z. B. einer halben Sekunde) Unschärfeeffekte zu erzeugen. Aber es sieht überflüssig aus.
Hier sind fertige Lösungen, die ich gefunden habe:
1. Das Unerwartete: Verwenden Sie UIToolBar
- (id) initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
[self setup];
}
return self;
}
- (id) initWithCoder:(NSCoder *)coder
{
if ((self = [super initWithCoder:coder]))
{
[self setup];
}
return self;
}
- (void) setup
{
if (iOS7OrLater)
{
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
toolbar.barTintColor = self.tintColor;
[self insertSubview:toolbar atIndex:0];
}
}
UIToolbar kann für diese Anforderungen verwendet werden, da es seinen einzigen eingebauten Unschärfemechanismus hat. Aber das Schlimme ist, dass es aus irgendeinem Grund Farben ignoriert und den Hintergrund unwiderruflich macht ...
Update:
Verwenden Sie barTintColor nicht, um Farbbrüche zu vermeiden. Sie können auch den Stil der Symbolleiste ändern, wenn Sie eine dunkle Unschärfe wünschen (verwenden Sie UIBarStyleBlack).
2. FXBlurView .
Im Gegensatz zur Symbolleiste ist es positiver, aber der dynamische Mechanismus ist noch selten und kann tatsächlich nur für statischen Hintergrund verwendet werden. (dynamisch = NEIN).
In iOS8 können Sie mit Hilfe von UIVisualEffect class Unschärfeeffekte für Ansichten implementieren.
Mit dem folgenden Code können Sie den Unschärfeeffekt auf die Ansicht anwenden.
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];
Ich habe festgestellt, dass LiveFrost ein großartiges und einfach zu integrierendes Projekt für Live-Unschärfe ist.
Sie können UIVisualEffect vom Storyboard aus verwenden.
Ziehen Sie den visuellen Effekt mit Unschärfe auf das Storyboard. Der gewünschte Effekt kann erreicht werden, indem das Alpha der HINTERGRUNDFARBE eingestellt wird. Die Unteransichten sollten zur Ansicht der visuellen Effektansicht hinzugefügt werden und sind nicht von der Hintergrundunschärfe betroffen.
Der Lebendigkeitseffekt muss oben in den Ansichtsoptionen ausgewählt werden.
Siehe Bild:
Die Verwendung der Navigationsleiste zum Bereitstellen von Unschärfen funktioniert auf älteren Geräten mit iOS 7 nicht