Objective c 如果与CGContextSetShadowWithColor一起使用,UIBezierPath性能较慢

Objective c 如果与CGContextSetShadowWithColor一起使用,UIBezierPath性能较慢,objective-c,core-graphics,drawrect,cgcontext,uibezierpath,Objective C,Core Graphics,Drawrect,Cgcontext,Uibezierpath,我正在开发一个应用程序,用户可以用手指触摸画线,或者简单地喷颜色。 我使用UIBezierPath在drawRect方法中用手指触摸绘制路径(颜色),代码如下 CGContextRef context=UIGraphicsGetCurrentContext() 这个代码在模拟器上运行得很好,但在设备上喷洒速度非常慢。 问题只在于方法调用CGContextSetShadowWithColor,如果我评论这一行,那么性能最好,没有任何问题 请告诉我为什么会这样,我应该怎么做。 这条线是必要的,因为我

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

CGContextRef context=UIGraphicsGetCurrentContext()

这个代码在模拟器上运行得很好,但在设备上喷洒速度非常慢。 问题只在于方法调用CGContextSetShadowWithColor,如果我评论这一行,那么性能最好,没有任何问题

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

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

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


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

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

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

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

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];
}