¿Cómo dibujo una sombra debajo de una UIView?

Resuelto Fraser Speirs asked hace 54 años • 16 respuestas

Estoy intentando dibujar una sombra debajo del borde inferior de UIViewCocoa 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:

  1. Guarde el estado de los gráficos.
  2. Llame a la función CGContextSetShadow, pasando los valores apropiados.
  3. Realiza todo el dibujo al que quieras aplicar sombras.
  4. Restaurar el estado de los gráficos.

Probé lo siguiente en una UIViewsubclase:

- (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 UIViewpara que esto funcione.

Fraser Speirs avatar Jan 01 '70 08:01 Fraser Speirs
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>
0llie avatar Feb 23 '2011 23:02 0llie
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;
ZYiOS avatar Mar 25 '2011 03:03 ZYiOS