Dibujo redondeado rect en graficos core
Quiero replicar los marcadores de eventos del calendario predeterminado del iPad, que se ven así:
Estoy tratando de usar coregraphics para esto, pintando un camino de rectas redondeadas. Este es el resultado que pude encontrar:
Como puede ver, la versión del iPad se ve mucho más suave en las esquinas redondeadas. Intenté usar un ancho de línea más grande, que se ve así:
Mi código se ve así (lo obtuve de este sitio web):
<code>UIColor* fillColor= [self.color colorByMultiplyingByRed:1 green:1 blue:1 alpha:0.2]; CGContextSetLineWidth(ctx, 1.0); CGContextSetStrokeColorWithColor(ctx, self.color.CGColor); CGContextSetFillColorWithColor(ctx, fillColor.CGColor); CGRect rrect = self.bounds; CGFloat radius = 30.0; CGFloat width = CGRectGetWidth(rrect); CGFloat height = CGRectGetHeight(rrect); if (radius > width/2.0) radius = width/2.0; if (radius > height/2.0) radius = height/2.0; CGFloat minx = CGRectGetMinX(rrect); CGFloat midx = CGRectGetMidX(rrect); CGFloat maxx = CGRectGetMaxX(rrect); CGFloat miny = CGRectGetMinY(rrect); CGFloat midy = CGRectGetMidY(rrect); CGFloat maxy = CGRectGetMaxY(rrect); CGContextMoveToPoint(ctx, minx, midy); CGContextAddArcToPoint(ctx, minx, miny, midx, miny, radius); CGContextAddArcToPoint(ctx, maxx, miny, maxx, midy, radius); CGContextAddArcToPoint(ctx, maxx, maxy, midx, maxy, radius); CGContextAddArcToPoint(ctx, minx, maxy, minx, midy, radius); CGContextClosePath(ctx); CGContextDrawPath(ctx, kCGPathFillStroke); // draw circle on left side CGRect target= CGRectMake(rect.origin.x + 4.0, rect.origin.y + 3.0, 7.0, 7.0); CGContextSetFillColorWithColor(ctx, self.color.CGColor); CGContextSetAlpha(ctx, 0.4); CGContextFillEllipseInRect(ctx, target); CGContextSetAlpha(ctx, 0.9); CGContextSetStrokeColorWithColor(ctx, self.color.CGColor); CGContextStrokeEllipseInRect(ctx, target); </code>
¿Alguien puede ayudarme a acercar los resultados al original? ¿Debo usar una técnica diferente para pintar el rectángulo redondeado, o hay algún parámetro que pueda cambiar para que se vea más suave? Ya he intentado usar unUIBezierPath
, pero básicamente se veía igual. ¿Algun consejo?
[editar] ElCGRectInset
solución basada en esto se ve así: