iphone ios uinavigationcontroller calayer shadow

iphone - CALayer: ¿Shadow causa un hit en el rendimiento?



ios uinavigationcontroller (4)

Deberías esperar una desaceleración al agregar una sombra. Un shadowRadius de 20 es muy alto y será especialmente lento.

La otra clave para mejorar la velocidad de representación de la sombra: establecer la propiedad shadowPath . Puede ayudar dramáticamente.

Así que estoy haciendo algunas animaciones personalizadas en mi controlador de navegación y la forma en que empuja y hace estallar a los viewControllers.

Todo funciona sin problemas. Tan pronto como agrego el siguiente código (en una subclase de UINavigationController ), me enfrento a un gran impacto en el rendimiento. Después de agregar una sombra, todas las animaciones se vuelven muy retrasadas. ¿Es esto esperado o estoy haciendo algo mal en el código?

// This code gets called once during NavigationController initialization. [self.view setClipsToBounds:NO]; [self.view.layer setCornerRadius:5]; [self.view.layer setShadowOffset:CGSizeMake(0, 20)]; [self.view.layer setShadowColor:[[UIColor yellowColor] CGColor]]; [self.view.layer setShadowRadius:20.0]; [self.view.layer setShadowOpacity:1];

EDITAR:

Cambié mi radio de sombra a 1 y sigue siendo lento


Sí, las sombras son muy caras (especialmente una sombra tan grande, juega con el radio y notarás que hace una gran diferencia en el grado de desaceleración que experimentas). Una forma de mejorar el rendimiento es representarlo una vez en un CGImageContext y simplemente mostrar esa imagen en lugar de que la capa vuelva a representar la sombra cada vez que se vuelve a dibujar (pero esto no funciona si la sombra necesita animarse o algo así).



self.view.layer.shouldRasterize = YES; self.view.layer.rasterizationScale = UIScreen.mainScreen.scale;

Recientemente tuve algunos problemas con las sombras lentas de CALayer, ¡y esa simple línea de código lo solucionó todo para mí!