ios uiview nsstring drawrect dropshadow

ios - Agregar una sombra paralela al texto de NSString en un método drawRect: sin usar UILabel



uiview dropshadow (1)

Me gustaría agregar una sombra NSString (UIStringDrawing) al texto dibujado usando el método de categoría NSString (UIStringDrawing) proporcionado por iOS:

- (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize lineBreakMode:(UILineBreakMode)lineBreakMode baselineAdjustment:(UIBaselineAdjustment)baselineAdjustment;

Claramente, no hay una opción de sombreado.

Sí, uno podría usar un UILabel aquí y obtener propiedades shadow para establecer, pero eso no sería tan efectivo, ya que cualquier subclase de UIView (como UILabel) envuelve un objeto CALayer y será más pesada (en cuanto al rendimiento).

Aquí está el contexto:

Estoy haciendo un dibujo personalizado para una subclase UITableViewCell, implementando drawRect: en la vista de celda de la tabla en lugar de crear la celda de la tabla desde un archivo Nib de subclases UIView compuestas.

La composición de un grupo de subclases de UIView frustraría el propósito de tratar de mantener esta inclinación y permanecer entre 50-60 fotogramas por segundo en el rendimiento de desplazamiento de la vista de tabla.

Intenté dibujar la cuerda dos veces con un ligero desplazamiento. Esto puede resultar aceptable una vez que modifico el color de la sombra paralela en el color de fondo de la celda que tengo en marcha, pero parece bastante tonto. Ciertamente, no hay una propiedad de desenfoque de sombras como la que se obtiene con UILabel.

Busqué soluciones y o bien recomendaron el uso de UILabel (que he descartado por encima, ya que tengo una docena de elementos textuales distintos que se CGContextSetShadow() la vista de celda de la tabla) o CGContextSetShadow() . Este último siempre parece ser sugerido en el contexto de formas rectangulares, y no necesariamente para adjuntar una sombra a la ruta del texto dibujado directamente con el método NSString drawAtPoint... mencionado anteriormente. (Lo probé, pero no pareció funcionar (es decir, nada cambió); soy nuevo en el dibujo de Core Graphics).

Sugerencias?


Funciona bien para mí con CGContextSetShadow() . Ejemplo:

- (void)drawRect:(CGRect)rect { NSString *string = @"Hello World!"; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetShadow(context, CGSizeMake(20.0f, 20.0f), 10.0f); [string drawAtPoint:CGPointMake(100.0f, 100.0f) withFont:[UIFont boldSystemFontOfSize:36.0f]]; }