2014-10-12 7 views
27

Ho una cella prototipo e inserisco unoall'interno del suo ContentView. Lo stile di sfocatura di Visual Effect View è scuro e Vibrancy è disattivato. Quindi ho impostato l'alfa di Visual Effect View a 0,5 usando l'IB.Avviso Xcode: "Ciò causerà la visualizzazione dell'effetto interrotto finché l'opacità non ritorna a 1"

Poi, il tempo di esecuzione, Ho ricevuto un avviso che dice:

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

non riuscivo a capire il motivo per cui questo avviso è lì e come posso impostare questa proprietà alpha correttamente.

+0

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

+0

Si può fare con le istantanee, e non toccare mai la vista di opacità sfocatura: http://stackoverflow.com/a/31708699/1633251 –

risposta

13

Per quanto posso ricordare, non è possibile modificare l'alfa di una vista effetto visivo. L'alfa deve sempre essere uno.

+5

Certo che puoi. Potrebbe non dare l'effetto desiderato. Tuttavia, in molti casi lo vedrà comunque come un avvertimento. – sebrock

+11

L'alfa di Visual Effect è modificabile, ma questo avviso è fastidioso. –

5

user1179321 sicuramente corretto. Secondo la documentazione di UIVisualEffectView;

Quando si utilizza la classe UIVisualEffectView, evitare valori alfa pari inferiore a 1. Creazione di viste che sono parzialmente trasparenti cause sistema di combinare la vista e tutto il subviews associato durante un passaggio rendering offscreen. Gli oggetti UIVisualEffectView devono essere combinati come parte del contenuto su cui sono sovrapposti per visualizzare corretto. Impostando l'alpha su meno di 1 nella vista effetti visivi o su una delle sue anteprime fa sì che molti effetti appaiano errati oppure no visualizzati.

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

+4

Come dovremmo cambiare l'effetto visivo sfocato correttamente se vogliamo che sia più trasparente? –

7

L'effetto desiderato si può ottenere impostando alfa del colore di sfondo piuttosto che Visual Effect View. Le sottoview dovrebbero essere aggiunte a View of Visual Effect View e non sono influenzate dalla sfocatura dello sfondo.

L'effetto Vibrancy deve essere selezionato nelle opzioni Visualizza vista vista sopra.

Vedi Immagine:

enter image description here

+0

Lo stile non viene visualizzato su XCode 6.1.1 – Caipivara

+0

Controllare se la vibrazione è selezionata. Ho aggiornato la risposta :) –

+0

Questo risultato non ha un effetto diverso. Dato che l'alphaing dello sfondo farà sì che il contenuto (se ce n'è uno) continui a essere visualizzato all'alfa completa. – chakrit

1

La mia soluzione:

  1. duplicare il livello dietro la vista effetto visivo. (Nel mio caso UIImageView)
  2. Animate il valore alfa della vista duplicata. (ad esempio, forma alfa da 1 a 0, mostra l'immagine sfocata)
12

La domanda è cosa si desidera animare. Se è l'effetto, non è possibile animarlo tramite la proprietà alpha. Tuttavia, dal momento che iOS 9, è possibile animarlo con l'impostazione dell'effetto nel blocco di animazione.

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

In alternativa, è possibile animare l'effetto tramite un'animazione alfa della vista involucro, come proposto in altre risposte (lavorare anche su iOS 8).

Se si desidera animare il contenuto della vista effetto visivo (i subviews), animate la proprietà contentView invece (che si dovrebbe utilizzare per aggiungere viste secondarie della vista effetto).

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

Quindi, per riassumere, non si dovrebbe mai cambiare alfa del UIVisualEffectView stesso come è più probabile, non ciò che si desidera.

0

Se si sta presentando modally viewcontroller, provare a disabilitare la casella di controllo animazione in seguito.

+0

elabora la tua risposta –

+0

se stai presentando il viewcontroller senza animazione, puoi animare manualmente lo sfondo uivisualeffectview. – vanab

0

Non si sa mai se il ritardo è abbastanza lungo; quindi un po 'di una soluzione più pulita è solo fare la presentazione nel ciclo di esecuzione successivo.

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