1

我正在开发一个应用程序,用户可以在其中用手指触摸画线或简单地喷涂颜色。我正在使用 UIBezierPath 在 drawRect 方法中使用以下代码绘制手指触摸的路径(颜色)。

CGContextRef 上下文 = UIGraphicsGetCurrentContext();

for (BezierPath *path in paths)
{
    path.path.lineWidth = [DataController dataController].apertureRadius * 2;
    path.path.lineJoinStyle = kCGLineJoinRound;
    path.path.lineCapStyle = kCGLineCapRound;
    ///
    [path.color set];
    CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 20, [path.color CGColor]);//Problem
    //

    [path.path stroke];
}

这段代码在模拟器上运行完美,但在设备上喷雾真的很慢。问题仅在于方法调用 CGContextSetShadowWithColor,如果我评论这条线性能最好,完全没有问题。

请告诉我为什么会这样,我该怎么办。这条线是必要的,因为我想用模糊阴影显示类似喷雾的效果。

4

1 回答 1

1

绘制阴影可能很慢。系统必须将您的路径绘制到屏幕外缓冲区,计算屏幕外缓冲区的 alpha 通道到另一个屏幕外缓冲区的高斯模糊,然后将两个屏幕外缓冲区合成到原始图形上下文中。

我怀疑每次更新触摸时,您都会重新绘制触摸所遵循的整个路径。您需要在每一帧上尽可能少地绘制。

保留您自己的位图上下文(使用CGBitmapContextCreate或创建UIGraphicsBeginImageContextWithOptions)。吸引到这个私人环境。当您获得触摸移动事件时,仅将笔划从触摸的旧位置绘制到新位置。然后从位图上下文中获取图像(使用CGBitmapContextCreateImageUIGraphicsGetImageFromCurrentImageContext)并将其设置为视图的图像或图层的内容。

于 2012-01-30T04:58:28.230 回答