Coregraphics вызывает большое отставание на iPad? - PullRequest
0 голосов
/ 27 сентября 2011
 UIGraphicsBeginImageContext(self.view.bounds.size);
        [currentStrokeImageView.image drawInRect:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeNormal);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), dWidth);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, 1.0f);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), pointA.x, pointA.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), pointB.x, pointB.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        currentStrokeImageView.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

По какой-то причине это работает абсолютно без задержек на iphone / ipod, но на iPad их значительное отставание при рисовании.Код, который я использую выше, какие-либо предложения, чтобы это исправить?

1 Ответ

3 голосов
/ 01 октября 2011

Причина, по которой это так медленно, в том, что вы делаете это в touchesMoved:withEvent:.Этот метод может вызываться много, много раз (очевидно), пока получаются сенсорные события.Поскольку рисование в графическом контексте может быть ресурсоемкой операцией, я бы рекомендовал , а не делать все, что вы там делаете.Я бы, насколько это возможно, отложил бы рендеринг, который вы делаете, на методы touchesBegin и touchesEnd.Если это невозможно, возможно, вы могли бы выполнить эти операции только после достижения определенной дельты в движениях, например, каждые 2.0f точек.

...