2010-09-09 15 views
18

Estaba muy emocionado cuando descubrí lo fácil que es agregar sombras a mi UIViews en el iPhone/iPad.La sombra de dibujo con Quartz es lenta en iPhone y iPad. ¿De otra manera?

Apenas añada el marco en Xcode, añadir la importación a la parte superior del archivo:

#import <QuartzCore/QuartzCore.h> 

Luego, más tarde:

self.contentView.layer.shadowRadius = 3.0; 
self.contentView.layer.shadowOffset = CGSizeMake(-2.0, -3.0); 
self.contentView.layer.shadowOpacity = 0.5; 
self.contentView.layer.shadowColor = [UIColor blackColor].CGColor; 

Mientras que esto hace crear una hermosa sombra en mi aplicación, también se demora hasta la muerte ahora cuando se muestra la vista ... incluso cuando se lanza fuera del depurador. ¿Hay algo que estoy olvidando o este método simplemente no es práctico para vistas más grandes?

Como referencia, he publicado una captura de pantalla here.

Respuesta

53

Debe establecer el shadowPath property. Es la forma en que CoreGraphics puede optimizar las sombras.

Por ejemplo, si su vista es un rectángulo opaco:

Pensamiento
self.contentView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.contentView.bounds].CGPath; 
+0

De hecho, esto es exactamente lo que estaba buscando. ¡Gracias! – Moduspwnens

+0

Para aquellos que llegan aquí desde Google, ¿podría cambiar sus "self.bounds" por "self.contentView.bounds" para que coincidan con mi ejemplo? – Moduspwnens

+0

@Moduspwnens de hecho – cobbal

6

debo dejar una respuesta porque no quería que esta joya para conseguir enterrado en los comentarios.

Además de la respuesta de cobbal anterior, que ayudó mucho, occulus también mencionó la siguiente optimización para sombras no rectangulares, como sombras de texto.

self.contentView.layer.shouldRasterize = YES; 
// Fix visual degradation when rasterizing on high-density screens: 
self.contentView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
Cuestiones relacionadas