我有一种绘图方法,但在调整 UIGraphicsBeginImageContextWithOptions 的比例因子时,绘图性能会受到很大影响。
当比例为1.0时,一切都工作得非常快,但是,当视网膜显示的比例因子为0.0,2.0或3.0时,在绘制时有很多滞后的表现很糟糕。
对视网膜设备使用比例因子0.0,2.0或3.0时,可以修改什么来提高性能?
缓慢,滞后:
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0.0)
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 2.0)
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 3.0)
速度快,没有滞后:
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 1.0)
答案 0 :(得分:3)
我不确定您要执行哪种绘图,因为建议会根据应用程序而有所不同。例如,如果您正在绘制文本,则在当前上下文中需要配置许多设置,例如context?.setShouldSmoothFonts
,setShouldSubpixelQuantizeFonts
或setShouldSubpixelPositionFonts
。
默认情况下,Apple设置绘制图像的质量非常high,因此,您可能需要通过调整当前Core Graphics上下文的参数来优化性能,如下所示。
您可以尝试(在绘制之前)设置当前CGInterpolationQuality
的{{1}}。与CGContext
和.none
相比,.low
或.medium
的渲染速度有了显着提高,但这必须与图像质量保持平衡。尝试如下:
.high
考虑使用“图案”来加快绘图代码的速度。例如UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0.0)
let context = UIGraphicsGetCurrentContext()
context?.interpolationQuality = .medium //Change this value as per your needs
//Insert drawing code here.
。
调整上下文参数,例如UIColor(patternImage: image)
和context?.setMiterLimit(-10)
。
请注意,根据使用情况,您可以尝试使用context?.setShouldAntialias(false)
以及1.0
中的0.0
的比例因子来调整这些上下文参数。为了提供更快的渲染速度,在较低的图像质量下使用UIGraphicsBeginImageContextWithOptions
参数是有意义的,而对于较高的图像质量,可以将比例因子设置为1.0
。