2014-10-12 9 views
27

Ich habe eine Prototyp-Zelle und habe eine UIVisualEffectView in ihre ContentView eingefügt. Der Blur-Stil der visuellen Effektansicht ist dunkel und die Lebendigkeit ist deaktiviert. Dann setze ich das Alpha der visuellen Effektansicht auf 0,5 mit dem IB.Xcode-Warnung: "Dadurch wird der Effekt so lange unterbrochen, bis die Deckkraft wieder 1 wird."

Dann auf Laufzeit, erhalte ich eine Warnung, die sagt:

<UIVisualEffectView ...> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1. 

Ich konnte nicht verstehen, warum diese Warnung gibt es und wie ich richtig diese Alpha-Eigenschaft kann.

+0

Fade-in/out UIVisualEffectView - http://stackoverflow.com/a/31319366/194544 – beryllium

+0

Sie können es mit Snapshots und nie die Unschärfe Ansicht Opazität berühren: http://stackoverflow.com/a/31708699/1633251 –

Antwort

13

Soweit ich mich erinnern kann, können Sie das Alpha einer visuellen Effektansicht nicht ändern. Das Alpha muss immer eins sein.

+5

Sicher kannst du. Es könnte nur nicht den gewünschten Effekt geben. In vielen Fällen wird dies jedoch immer noch als Warnung verstanden. – sebrock

+11

Visual Effects Alpha ist veränderbar, aber diese Warnung nervt. –

5

user1179321 definitiv richtig. Laut UIVisualEffectView-Dokumentation;

Wenn die UIVisualEffectView-Klasse, Alpha-Werte vermeiden, die weniger als 1. Erstellen von Ansichten sind, die teilweise transparent Ursachen der System sind der Ansicht, und alle zugehörigen Subviews während eines Offscreen machen Pass zu kombinieren. UIVisualEffectView-Objekte müssen als Teil des Inhalts kombiniert werden, auf dem sie überlagert sind, damit korrekt angezeigt wird. Wenn Sie den Alpha-Wert in der visuellen Effektansicht auf 0 oder unter setzen, erscheinen viele Effekte inkorrekt oder nicht korrekt. .

https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html

+4

Wie sollten wir den visuellen Effekt der Unschärfe ändern, wenn wir ihn transparenter machen wollen? –

7

Der gewünschte Effekt kann anstatt die Ansicht visuellen Effekts, indem Alpha der Hintergrundfarbe erreicht werden. Die Unteransichten sollten zur Ansicht der visuellen Effektansicht hinzugefügt werden und sind nicht von der Hintergrundunschärfe betroffen.

Der Effekt Vibrancy muss in den obigen Ansichtseffekt-Ansichtsoptionen ausgewählt werden.

Siehe Bild:

enter image description here

+0

Der Stil erscheint nicht auf XCode 6.1.1 – Caipivara

+0

Bitte überprüfen Sie, ob die Vibrancy aktiviert ist. Ich habe die Antwort aktualisiert :) –

+0

Dieses Ergebnis in einem anderen Effekt ist es nicht. Da der Hintergrund alphanisiert wird, wird der Inhalt (falls vorhanden) immer noch mit vollem Alpha angezeigt. – chakrit

1

Meine Lösung:

  1. die Schicht hinter der visuellen Effekt Ansicht duplizieren. (In meinem Fall ein UIImageView)
  2. Animiert den Alpha-Wert der doppelten Ansicht. (z. B. Alpha-Form 1 bis 0, zeigt das unscharfe Bild)
12

Die Frage ist, was Sie animieren möchten. Wenn es der Effekt ist, können Sie es nicht über die Eigenschaft alpha animieren. Seit iOS 9 können Sie jedoch animieren, indem Sie den Effekt im Animationsblock festlegen.

UIVisualEffectView* view = [[UIVisualEffectView alloc] initWithFrame:self.view.bounds]; 
view.effect = nil; 
[UIView animateWithDuration:0.3 animations:^{ 
    view.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 
}]; 

Alternativ können Sie den Effekt durch Animieren des alpha der Hülle Ansicht animieren, wie in den anderen Antworten vorgeschlagen (Arbeiten auch auf iOS 8).

Wenn Sie den Inhalt der visuellen Effektansicht (die Unteransichten) animieren möchten, animieren Sie stattdessen die contentView-Eigenschaft (die Sie zum Hinzufügen von Unteransichten der Effektansicht verwenden sollten).

[UIView animateWithDuration:0.3 animations:^{ 
    view.contentView.alpha = 1.0; 
}]; 

So zusammenzufassen, sollten Sie nie Alpha des UIVisualEffectView sich ändern, da es höchstwahrscheinlich nicht das, was Sie wollen.

0

Wenn Sie den Viewcontroller modal präsentieren, versuchen Sie, das Animations-Kontrollkästchen im Abschnitt zu deaktivieren.

+0

Erarbeiten Sie Ihre Antwort –

+0

Wenn Sie ViewController ohne Animation präsentieren, können Sie Ihren Hintergrund uivisualeffectview manuell animieren. – vanab

0

Sie wissen nie, ob die Verzögerung lang genug ist; Also ein bisschen eine sauberere Lösung ist nur die Präsentation in der nächsten Laufschleife zu tun.

dispatch_async(dispatch_get_main_queue(), ^(void){ 
    [self presentViewController:yourPopoverr animated: YES completion: nil]; 
    }); 
Verwandte Themen