web-dev-qa-db-ger.com

Xcode-Warnung: "Dadurch wird der Effekt unterbrochen, bis die Deckkraft wieder 1 beträgt."

Ich habe eine Prototypzelle und habe ein UIVisualEffectView in ihr ContentView eingefügt. Der Weichzeichnungsstil der Ansicht für visuelle Effekte ist dunkel und die Lebendigkeit ist deaktiviert. Dann setze ich das Alpha der Visual Effect View mit dem IB auf 0,5.

Dann bekomme ich zur Laufzeit eine Warnung, die besagt:

<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 vorhanden ist und wie ich diese Alpha-Eigenschaft richtig festlegen kann.

29
aslisabanci

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

12
user1179321

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

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 animieren, indem Sie das Alpha der Wrapper-Ansicht animieren, wie in den anderen Antworten vorgeschlagen (funktioniert auch unter iOS 8).

Wenn Sie den Inhalt der visuellen Effektansicht (der Unteransichten) animieren möchten, animieren Sie stattdessen die Eigenschaft contentView (mit der Sie Unteransichten der Effektansicht hinzufügen sollten).

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

Zusammenfassend sollten Sie also niemals das Alpha von UIVisualEffectView selbst ändern, da es höchstwahrscheinlich nicht das ist, was Sie wollen.

14
zvonicek

Der gewünschte Effekt kann erzielt werden, indem anstelle der visuellen Effektansicht das Alpha Hintergrundfarbe eingestellt wird. Die Unteransichten sollten zur Ansicht der visuellen Effektansicht hinzugefügt werden und sind nicht von der Hintergrundunschärfe betroffen.

Der Effekt Lebendigkeit muss in den obigen Optionen für die Ansichtseffektansicht ausgewählt werden.

Siehe Bild:

enter image description here

8
Sahil Kapoor

user1179321 auf jeden fall richtig. Laut UIVisualEffectView-Dokumentation;

Vermeiden Sie bei Verwendung der UIVisualEffectView-Klasse Alpha-Werte, die kleiner als 1 sind. Wenn Sie Ansichten erstellen, die teilweise transparent sind, kombiniert das System die Ansicht und alle zugehörigen Unteransichten während eines Offscreen-Renderdurchlaufs. UIVisualEffectView-Objekte müssen als Teil des Inhalts kombiniert werden, über den sie gelegt werden, damit sie korrekt aussehen. Wenn Sie den Alpha-Wert in der visuellen Effektansicht oder in einer der Überansichten auf weniger als 1 einstellen, werden viele Effekte falsch angezeigt oder gar nicht angezeigt.

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

5

Meine Lösung:

  1. Duplizieren Sie die Ebene hinter der visuellen Effektansicht. (In meinem Fall eine UIImageView)
  2. Animiert den Alpha-Wert der duplizierten Ansicht. (z. B. Alpha-Form 1 bis 0, zeigt das unscharfe Bild)
1
Bill Chan

Sie wissen nie, ob die Verzögerung lang genug ist. Eine etwas sauberere Lösung besteht darin, die Präsentation nur in der nächsten Ausführungsschleife durchzuführen.

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

Wenn Sie viewcontroller modal präsentieren, versuchen Sie, das Kontrollkästchen für die Animation in segue zu deaktivieren.

0
vanab