Coregraphics在iPad上造成了大的滞后?

时间:2011-09-26 23:10:11

标签: iphone memory core-graphics lag

 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 个答案:

答案 0 :(得分:3)

之所以如此滞后是因为你在touchesMoved:withEvent:中这样做了。在接收到触摸事件时,可以多次(显然)调用此方法。因为绘制到图形上下文可能是一个资源密集型操作,我建议做你在那里做的所有事情。我会尽可能地将您正在进行的渲染推迟到touchesBegintouchesEnd方法。如果这是不可能的,也许你只能在动作中达到某个增量后才能执行这些操作,例如每2.0f个点。