Pregunta

Estoy dibujando una imagen redondeada en una celda UITableView este modo:

CGRect imageRect = CGRectMake(8, 8, 40, 40);
CGFloat radius = 3;

CGFloat minx = CGRectGetMinX(imageRect);
CGFloat midx = CGRectGetMidX(imageRect);
CGFloat maxx = CGRectGetMaxX(imageRect);
CGFloat miny = CGRectGetMinY(imageRect);
CGFloat midy = CGRectGetMidY(imageRect);
CGFloat maxy = CGRectGetMaxY(imageRect);

CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);

CGContextClip(context);

[self.theImage drawInRect:imageRect];

Esto se ve muy bien, pero me gustaría añadir una sombra a la misma para el efecto agregado. He intentado usar algo en la línea de:

CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 2, [[UIColor grayColor] CGColor]);
CGContextFillPath(context);

Sin embargo, esto sólo funciona cuando la imagen tiene áreas transparentes, si la imagen no es transparente en absoluto, ni siquiera dibujar una sombra alrededor del borde.

Me pregunto si hay algo que estoy haciendo mal?

¿Fue útil?

Solución

Resulta que la forma correcta de hacerlo es mediante la saturación de la misma UIImage lugar de la ruta. Es entonces una simple cuestión de:

CGContextSetShadow(...);
[self.theClippedImage drawInRect:...];

Otros consejos

Me imagino que si la imagen que está dibujando a no tiene áreas transparentes a continuación CoreGraphics interpreta toda la imagen como un objeto sólido. Entonces, si se trata de extraer una sombra la sombra se dibuja fuera de los límites de la imagen y, como tal, no lo verá.

Esta página proporciona un buen ejemplo de cómo hacer este tipo de dibujo con CoreGraphics. Tal vez usted podría tratar de modificar el código proporcionado allí y ver si se soluciona el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top