绘图性能UIGraphicsBeginImageContextWithOptions在Xcode for iOS app中使用Swift缩放因子

use*_*509 9 drawing ios uigraphicscontext swift

我有一个绘图方法,但在调整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)
Run Code Online (Sandbox Code Playgroud)

画得快,没有滞后:

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 1.0)
Run Code Online (Sandbox Code Playgroud)

Pra*_*tti 5

我不确定您要执行哪种绘图,因为建议会根据应用程序而有所不同。例如,如果您正在绘制文本,然后还有要在当前环境等配置大量设置context?.setShouldSmoothFontssetShouldSubpixelQuantizeFontssetShouldSubpixelPositionFonts

Apple默认情况下将绘制的图像质量设置为很高,因此,您可能需要通过调整当前Core Graphics上下文的参数来优化性能,如下所示。

  1. 您可以尝试(在绘制之前)设置CGInterpolationQualitycurrent的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.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 考虑使用图案来加快绘图代码。例如UIColor(patternImage: image)

  3. 调整上下文参数,例如context?.setMiterLimit(-10)context?.setShouldAntialias(false)

请注意,您可以尝试使用调整的比例因子这些上下文参数1.0以及0.0UIGraphicsBeginImageContextWithOptions视使用情况。为了提供更快的渲染效果,在图像质量较低的情况下,1.0可以使用参数,而对于更好的图像质量,可以将比例因子设置为0.0