2012-07-31 10 views
5

así que tengo una UIView que tiene una sombra:añadir sombra a causas celulares Laggy desplazamiento

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)]; 
[containerFrame.layer setShadowRadius:4.0]; 
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor]; 
[containerFrame.layer setShadowOpacity:0.4]; 

con este en su lugar, mi FPS desplazamiento se reduce a 20-30. Elimine la sombra y luego auge, mi FPS vuelve a 60 y el desplazamiento es tan suave como la mantequilla. Ahora la pregunta es si necesito tener un efecto de sombra alrededor de esta vista de caja/contenedor. ¿Cómo logro esto sin ralentizar el desplazamiento? establecer la ruta sombra

Respuesta

16

Probar:

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)]; 
[containerFrame.layer setShadowRadius:4.0]; 
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor]; 
[containerFrame.layer setShadowOpacity:0.4]; 

// New line 
[containerFrame.layer setShadowPath:[UIBezierPath bezierPathWithRect:containerFrame.bounds].CGPath]; 

Si tiene que animar este punto de vista (y especialmente si es parte de un UITableViewCell) que probablemente se dará cuenta de tartamudea en la animación. Esto se debe a que el cálculo de la sombra paralela para su vista requiere Core Animation para hacer un pase de representación fuera de pantalla para determinar la forma exacta de su vista para averiguar cómo renderizar su sombra . (Recuerde, su punto de vista podría ser cualquier forma compleja, posiblemente incluso con agujeros en ella.)

De On the importance of setting shadowPath.

+0

¿cómo configuro el radio y esas cosas con una ruta? – aherlambang

+0

también color y cosas – aherlambang

+0

@aherlambang actualizó mi respuesta con los detalles –

1

Set containerFrame.layer.shouldRasterize = YES; La razón por la que se ralentiza es porque el cálculo de la sombra es costoso. Rasterizar colapsará la vista en una imagen para que sea mucho más rápido.

+0

Intenté rasterizarlo ... pero no es tan rápido como quería, es más rápido – aherlambang

+3

¿Demasiado rápido? ¿Es eso lo que quieres decir en serio? – borrrden

+0

¿cuál es mejor, usando shadowPath o usando rasterize? – aherlambang

Cuestiones relacionadas