Desenho arredondado rect nos gráficos principais
Eu quero replicar os marcadores de eventos do calendário padrão do iPad, que se parecem com isso:
Estou tentando usar o coregraphics para isso, pintando um caminho de um retângulo arredondado. Este é o resultado que eu consegui fazer:
Como você pode ver, a versão do iPad parece muito mais suave nos cantos arredondados. Eu tentei usar uma largura de linha maior, que se parece com isso:
Meu código se parece com isso (entendi deste site):
<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>
Alguém pode me ajudar a aproximar os resultados do original? Devo usar uma técnica diferente para pintar o retângulo arredondado, ou existem parâmetros que eu possa mudar para que pareça mais suave? Eu já tentei usar umUIBezierPath
, mas basicamente parecia o mesmo. Alguma dica?
[editar] OCGRectInset
solução baseada em imagens se parece com isso: