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