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上,它们在绘图时是一个显着的滞后。我上面使用的代码是什么,有什么建议可以解决这个问题吗?
答案 0 :(得分:3)
之所以如此滞后是因为你在touchesMoved:withEvent:
中这样做了。在接收到触摸事件时,可以多次(显然)调用此方法。因为绘制到图形上下文可能是一个资源密集型操作,我建议不做你在那里做的所有事情。我会尽可能地将您正在进行的渲染推迟到touchesBegin
和touchesEnd
方法。如果这是不可能的,也许你只能在动作中达到某个增量后才能执行这些操作,例如每2.0f
个点。