Как мне заполнить цветовое пространство в CGRect

#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 перед обводкой и восстановить его после, чтобы при заполнении по-прежнему задавался текущий путь.)