我正在为 iPhone 制作一个简单的绘图程序。目前,触摸事件将它们的位置添加到一个列表中,该列表与一组 CGContextAddLineToPoint 调用相连,这些调用在每次调用 drawRect 时都会重新绘制。
我在相当少的行数时遇到了性能问题(尽管它们是透明的),所以我尝试将所有内容都绘制到 CGLayer 中。现在,它不再每帧绘制每条线,而是每条线只绘制一次,并且每帧将 CGLayer 绘制到屏幕上。
CGContextRef backgroundContext = CGLayerGetContext(pathBuffer);
CGContextSetLineWidth(backgroundContext, 2.0);
CGContextSetLineCap(backgroundContext, kCGLineCapButt);
CGContextSetStrokeColorWithColor(backgroundContext, [pathColor CGColor]);
if([[touchPoints objectAtIndex:0] continuesToNextPoint])
{
CGContextMoveToPoint(backgroundContext, [[touchPoints objectAtIndex:0] point].x, [[touchPoints objectAtIndex:0] point].y);
CGContextAddLineToPoint(backgroundContext, [[touchPoints objectAtIndex:1] point].x, [[touchPoints objectAtIndex:1] point].y);
CGContextStrokePath(backgroundContext);
}
//remove it from touchpoints
[touchPoints removeObjectAtIndex:0];
}
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawLayerAtPoint(context, CGPointMake(0, 0), pathBuffer);
如果有的话,这比我以前做的要慢。难道我做错了什么?我会更好地绘制到 UIImage 或其他东西吗?谢谢。