UIViewのサブクラスを作成し、drawRectメソッドで円の一部を描画しようとしています。
私はそれを使っbezierPathWithArcCenter
て塗りつぶしてみましたが、それはパイの形(画像3)になり、それは私が求めているものではありません。画像1と2に見えるものを描きたいです。
多分私はどういうわけか完全な円を切り取ることができますか?円の周りの領域は透明である必要があります。
UIViewのサブクラスを作成し、drawRectメソッドで円の一部を描画しようとしています。
私はそれを使っbezierPathWithArcCenter
て塗りつぶしてみましたが、それはパイの形(画像3)になり、それは私が求めているものではありません。画像1と2に見えるものを描きたいです。
多分私はどういうわけか完全な円を切り取ることができますか?円の周りの領域は透明である必要があります。
TompaLompasの回答は、私を正しい方向に向けました(円弧の描画部分を使用)。ただし、完全な解決策と答えは次のようになります。
#define DEGREES_TO_RADIANS(degrees) ((M_PI * degrees)/ 180)
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
CGContextRef ctx = UIGraphicsGetCurrentContext();
int radius = self.frame.size.width / 2;
CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
//Image 2
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGContextAddArc(ctx, center.x, center.y, radius, DEGREES_TO_RADIANS(225), DEGREES_TO_RADIANS(315), NO);
CGContextDrawPath(ctx, kCGPathFill);
}
これで drawRect をオーバーライドしてみてください:
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
float radius = 50.0f;
float x_left = rect.origin.x;
float x_left_center = x_left + radius;
float y_top = rect.origin.y;
float y_top_center = y_top + radius;
/* Begin path */
CGFloat white[4] = {0.0f, 204.0f/255.0f, 1.0f, 0.8f};
CGContextSetFillColor(context, white);
CGContextSetLineWidth(context, 1.0);
CGContextBeginPath(context);
CGContextMoveToPoint(context, x_left, y_top_center);
CGContextAddArcToPoint(context, x_left, y_top, x_left_center, y_top, radius);
CGContextAddLineToPoint(context,x_left, y_top + radius);
CGContextFillPath(context);
}
回転した画像番号2を描画します