Сглаживание кривых Core Graphics

Я пытаюсь создать круговую полосу загрузки и хочу использовать Core Graphics вместо маскирующих изображений для создания эффекта. Однако я не получаю той точности, на которую рассчитывал:enter image description here

Что бы я ни пробовал, зазубрины выглядят очень плохо. Сглаживание включено, и я уже пытался уменьшить "плоскостность" до .1 в CGContextRef. Изображение получено в симуляторе (Retina), на устройстве оно выглядит немного лучше, но все равно не очень.

Код рисования, внутри подкласса CALayer:

-(void)drawInContext:(CGContextRef)ctx {    
    CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);

    CGFloat delta = toRadians(360 * percent);

    CGFloat innerRadius = 69.5;
    CGFloat outerRadius = innerRadius + 12;

    CGContextSetFillColorWithColor(ctx, [UIColor colorWithRed:99/256.0 green:183/256.0 blue:70/256.0 alpha:.5].CGColor);
    CGContextSetStrokeColorWithColor(ctx, [UIColor colorWithRed:99/256.0 green:183/256.0 blue:70/256.0 alpha:10.0].CGColor);
    CGContextSetLineWidth(ctx, 1);

    CGMutablePathRef path = CGPathCreateMutable();

    CGPathAddRelativeArc(path, NULL, center.x, center.y, innerRadius, -(M_PI / 2), delta);
    CGPathAddRelativeArc(path, NULL, center.x, center.y, outerRadius, delta - (M_PI / 2), -delta);
    CGPathAddLineToPoint(path, NULL, center.x, center.y-innerRadius);

    CGContextAddPath(ctx, path);
    CGContextFillPath(ctx);
    CGContextAddPath(ctx, path);
    CGContextStrokePath(ctx);
}

Это лучшее, на что способна Core Graphics, или я что-то упускаю?

6
задан Kevin 10 January 2012 в 21:05
поделиться