在iOS应用程序的Xcode中使用Swift绘制性能UIGraphicsBeginImageContextWithOptions缩放因子

时间:2015-09-25 15:57:57

标签: ios swift drawing uigraphicscontext

我有一种绘图方法,但在调整 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)

1 个答案:

答案 0 :(得分:3)

我不确定您要执行哪种绘图,因为建议会根据应用程序而有所不同。例如,如果您正在绘制文本,则在当前上下文中需要配置许多设置,例如context?.setShouldSmoothFontssetShouldSubpixelQuantizeFontssetShouldSubpixelPositionFonts

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

  1. 您可以尝试(在绘制之前)设置当前CGInterpolationQuality的{​​{1}}。与CGContext.none相比,.low.medium的渲染速度有了显着提高,但这必须与图像质量保持平衡。尝试如下:

    .high
  2. 考虑使用“图案”来加快绘图代码的速度。例如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.

  3. 调整上下文参数,例如UIColor(patternImage: image)context?.setMiterLimit(-10)

请注意,根据使用情况,您可以尝试使用context?.setShouldAntialias(false)以及1.0中的0.0的比例因子来调整这些上下文参数。为了提供更快的渲染速度,在较低的图像质量下使用UIGraphicsBeginImageContextWithOptions参数是有意义的,而对于较高的图像质量,可以将比例因子设置为1.0