デフォルトのiPadカレンダーのイベントマーカーを複製したいのですが、これは次のようになります。
私はこれにコアグラフィックを使用して、丸みを帯びた長方形のパスをペイントしようとしています。これは私が思いついた結果です:
ご覧のとおり、iPadのバージョンは丸みを帯びた角ではるかに滑らかに見えます。私は次のように見えるより大きな線幅を使用しようとしました:
私のコードは次のようになります(このWebサイトから入手):
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);
誰かが私が結果を元に近づけるのを手伝ってくれる?丸みを帯びた長方形をペイントするために別の手法を使用する必要がありますか、それとも滑らかに見えるように変更できるパラメータはありますか?すでに使ってみましたUIBezierPath
が、基本的には同じように見えました。任意のヒント?
[編集]CGRectInset
ベースのソリューションは次のようになります。