iphone ios8 uiblureffect uivisualeffectview

iphone - Advertencia de Xcode: "Esto hará que el efecto aparezca roto hasta que la opacidad vuelva a 1"



ios8 uiblureffect (7)

El efecto deseado se puede lograr configurando alfa del color de fondo en lugar de la Vista de efecto visual. Las subvistas deben agregarse a la vista de la vista de efecto visual y no se ven afectadas por el desenfoque del fondo.

El efecto de vibración debe seleccionarse en las opciones de vista de vista anterior.

Ver imagen:

Tengo una célula prototipo y coloco un UIVisualEffectView dentro de su ContentView . El estilo de desenfoque de Visual Effect View es oscuro y la vibración está desactivada. Luego puse el alfa de la Vista de efectos visuales en 0,5 utilizando el IB.

Luego, en el tiempo de ejecución, recibo una advertencia que dice:

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

No pude entender por qué esta advertencia está ahí y cómo puedo configurar esta propiedad alfa correctamente.


La pregunta es qué quieres animar. Si es el efecto, no puedes animarlo a través de la propiedad alpha . Sin embargo, desde iOS 9, puede animarlo configurando el efecto en el bloque de animación.

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

Alternativamente, puede animar el efecto animando el alfa de la vista de envoltura, como se propone en las otras respuestas (incluso en iOS 8).

Si desea animar el contenido de la vista de efecto visual (las subvistas), en su lugar, anime la propiedad contentView (que debe usar para agregar subvistas de la vista de efecto).

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

Entonces, para resumir, nunca debes cambiar el alfa de UIVisualEffectView, ya que es muy probable que no sea lo que quieres.


Mi solución:

  1. Duplica la capa detrás de la vista del efecto visual. (En mi caso un UIImageView)
  2. Anima el valor alfa de la vista duplicada. (p. ej., forma alfa 1 a 0, muestra la imagen borrosa)

Nunca se sabe si el retraso es lo suficientemente largo; Así que una solución un poco más limpia es hacer la presentación en el siguiente ciclo de ejecución.

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


Por lo que puedo recordar, no puede cambiar el alfa de una vista de efecto visual. El alfa siempre tiene que ser uno.


Si presentas modalmente el controlador de vista, intenta desactivar la casilla de verificación de animación en segue.


user1179321 definitivamente correcto. Según UIVisualEffectView Documentation;

Cuando use la clase UIVisualEffectView, evite los valores alfa menores a 1. La creación de vistas que son parcialmente transparentes hace que el sistema combine la vista y todas las subvistas asociadas durante un pase de procesamiento fuera de la pantalla. Los objetos UIVisualEffectView deben combinarse como parte del contenido sobre el que se colocan en capas para que parezcan correctos. Establecer el alfa en menos de 1 en la vista de efectos visuales o en cualquiera de sus vistas de supervisión hace que muchos efectos parezcan incorrectos o no se muestren en absoluto.

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