2017-09-23 2 views
1

Ich versuche, eine benutzerdefinierte Unschärfeansicht zu implementieren, in der der Unschärfe-Radius animiert werden kann und die Unscharfe Ansicht Füllmodi (CGBlendingMode oder CIFilter) überlagern kann Beliebige Animationen/Aktionen im Hintergrund erhalten.Hinzufügen einer animierbaren Unschärfe zu einer Ansicht, während der Hintergrund dynamisch bleibt

Ich habe zuerst UIVisualEffectView versucht, aber der Radius kann nicht animiert werden ohne Zugriff auf private APIs, was höchstwahrscheinlich zu einer Ablehnung der App führen würde.

Das Problem beim Erstellen eines Schnappschusses und beim Anwenden der Effekte besteht darin, dass die Ansicht statisch ist und jede Bewegung im Hintergrund von der Unschärfeansicht verdeckt wird.

Ich schaute auch FlexMonkey's Blurable, aber ich hatte ähnliche Ergebnisse wie der Schnappschuss.

Jede Anleitung wäre wirklich hilfreich. Cheers

Bearbeiten: Ich habe ein gif hinzugefügt, um zu demonstrieren, was ich versuche zu machen. Die rote Ansicht, die sich von links nach rechts bewegt, verwischt und multipliziert den Inhalt darunter und zeigt die Animation auf dem rot/blauen Quadrat dahinter.

enter image description here

+1

Ich könnte vorschlagen, versuchen 'UIViewEffectView', Animieren der Alpha. Es ist nicht das Gleiche wie das Animieren des Radius, aber es ergibt einen anständigen Effekt (vorausgesetzt, Ihre Absicht besteht darin, einfach von unscharf zu unscharf zu wechseln). – Rob

+0

Ich habe das zuerst versucht, aber durch die Reduzierung des Alphas wurde der Hintergrund neblig statt unscharf. Im Idealfall möchte ich UIVisualEffectView mit der Kontrolle über Blurradius und Füllmethoden neu erstellen. – elfanek

Antwort

1

Mischmodi sind extrem heikel und ich bin nicht sicher, es ist möglich, sie zu einem Live-UIView anzuwenden (GPUImageMacht Hilfe hier), aber die Unschärfe Radius (zwischen 0 und UIViewEffectView vollständig Blur) Animieren ist über this method:

Sie von einem nil Effekt auf einen Effekt wie UIBlurEffectStyleDark also, wenn wir eine Animation hinzufügen und dann Pause die Ebenen Animationen können wir die Ebene des timeoffset durch Einstellen der Fortschritt des Effekts steuern animieren!

- (void) setupBlur { 
    // Setup the blur to start with no effect 
    self.blurredEffectView = [[UIVisualEffectView alloc] initWithEffect:nil]; 

    // Add animation to desired blur effect 
    [UIView animateWithDuration:1.0 animations:^{ 
     [self.blurredEffectView setEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; 
    }]; 

    // Pause layer animations 
    self.blurredEffectView.layer.speed = 0; 
} 

einstellen Unschärfe zwischen 0,0 und 1,0 (Animation Dauer):

- (void) adjustBlur:(CGFloat)blurIntensity { 
    self.blurredEffectView.layer.timeOffset = blurIntensity; 
} 

Hinweis: dies nicht auf iOS arbeiten 8, wo UIBlurEffect Animationen werden nicht unterstützt.

Verwandte Themen