Рисование на сетчатке дисплея с использованием CoreGraphics - пиксельное изображение - PullRequest
9 голосов
/ 06 августа 2011

В моем iOS-приложении я пытаюсь рисовать кривые с помощью CoreGraphics.Сам рисунок работает нормально, но на экране сетчатки изображение рисуется с тем же разрешением и не удваивается.В результате получается пиксельное изображение.

Я рисую, используя следующие функции:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:self.canvasView];

    UIGraphicsBeginImageContext(self.canvasView.frame.size);
    [canvasView.image drawInRect:self.canvasView.frame];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetShouldAntialias(ctx, YES);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    CGContextSetLineWidth(ctx, 5.0);
    CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(ctx, currentPoint.x, currentPoint.y);
    CGContextStrokePath(ctx);
    canvasView.image =  UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;
    // some code omitted from this example
}

Совет, который я нашел, заключался в том, чтобы использовать свойство scaleFactor ,или CGContextSetShouldAntialias() функция , но пока ничего из этого не помогло.(Хотя я мог бы использовать их ненадлежащим образом.)

Любая помощь будет принята с благодарностью.

1 Ответ

28 голосов
/ 06 августа 2011

Вам нужно заменить UIGraphicsBeginImageContext на

if (UIGraphicsBeginImageContextWithOptions != NULL) {
  UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
} else {
  UIGraphicsBeginImageContext(size);
}

UIGraphicsBeginImageContextWithOptions был представлен в программном обеспечении 4.x. Если вы собираетесь запускать этот код на устройствах 3.x, вам нужно ослабить фреймворк UIKit. Если ваша цель развертывания 4.x или выше, вы можете просто использовать UIGraphicsBeginImageContextWithOptions без какой-либо дополнительной проверки.

...