#objective-c #cocoa
#objective-c #какао
Вопрос:
Я использую приведенный ниже код и пытаюсь сделать все, чтобы раскрасить результирующий круг, который он рисует, но ни за что на свете не могу понять это! Кто-нибудь может помочь? Как мне раскрасить круг, в котором рисуется мой метод?
Что у меня есть до сих пор, так это:
-(void)drawCircleAtPoint:(CGPoint)p withRadius:(CGFloat)radius inContext:(CGContextRef)context
{
UIGraphicsPushContext(context);
CGContextBeginPath(context);
CGContextAddArc(context, p.x, p.y, radius, 0, 2*M_PI, YES);
CGContextStrokePath(context);
UIGraphicsPopContext();
}
- (void)drawRect:(CGRect)rect
{
CGPoint midPoint;
midPoint.x = self.bounds.origin.x self.bounds.size.width/2;
midPoint.y = self.bounds.origin.y self.bounds.size.width/2;
CGFloat size = self.bounds.size.width/2;
if (self.bounds.size.height < self.bounds.size.width) size = self.bounds.size.height/2;
size *= 0.90;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
[[UIColor blackColor] setStroke];
CGColorRef color = [[UIColor redColor] CGColor];
CGContextSetFillColorWithColor(context, color);
CGContextFillPath(context);
[self drawCircleAtPoint:midPoint withRadius:size inContext:context];
}
Ответ №1:
Вы пытаетесь заполнить текущий путь, но вы еще ничего к нему не добавили. Единственная точка, в которой вы добавляете что-либо к текущему пути, — это in drawCircleAtPoint:withRadius:inContext:
, после чего вы только обводите его.
Переместите ваш CGContextFillPath
вызов в этот метод. Вы захотите заполнить перед обводкой, так как обводка сбросит текущий путь. (Если вы хотите заполнить поверх внутренней части обводки, вам нужно будет сохранить gstate перед обводкой и восстановить его после, чтобы при заполнении по-прежнему задавался текущий путь.)