¿Cómo dibujo una sombra debajo de una UIView?
Estoy intentando dibujar una sombra debajo del borde inferior de UIView
Cocoa Touch. Entiendo que debería usarlo CGContextSetShadow()
para dibujar la sombra, pero la guía de programación de Quartz 2D es un poco vaga:
- Guarde el estado de los gráficos.
- Llame a la función
CGContextSetShadow
, pasando los valores apropiados. - Realiza todo el dibujo al que quieras aplicar sombras.
- Restaurar el estado de los gráficos.
Probé lo siguiente en una UIView
subclase:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
..pero esto no funciona para mí y estoy un poco estancado acerca de (a) adónde ir a continuación y (b) si hay algo que deba hacer UIView
para que esto funcione.
Aceptado
Un enfoque mucho más sencillo es establecer algunos atributos de capa de la vista en la inicialización:
self.layer.masksToBounds = NO;
self.layer.shadowOffset = CGSizeMake(-15, 20);
self.layer.shadowRadius = 5;
self.layer.shadowOpacity = 0.5;
Necesitas importar QuartzCore.
#import <QuartzCore/QuartzCore.h>
self.layer.masksToBounds = NO;
self.layer.cornerRadius = 8; // if you like rounded corners
self.layer.shadowOffset = CGSizeMake(-15, 20);
self.layer.shadowRadius = 5;
self.layer.shadowOpacity = 0.5;
Esto ralentizará la aplicación. Agregar la siguiente línea puede mejorar el rendimiento siempre que su vista sea visiblemente rectangular:
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;