Legacy UIGraphics Function

Prefer using UIGraphicsImageRenderer over legacy functions

  • Identifier: legacy_uigraphics_function
  • Enabled by default: No
  • Supports autocorrection: No
  • Kind: idiomatic
  • Analyzer rule: No
  • Minimum Swift compiler version: 5.0.0
  • Default configuration:
    KeyValue
    severity warning

Rationale

The modern replacement is safer, cleaner, Retina-aware and more performant.

Non Triggering Examples

let renderer = UIGraphicsImageRenderer(size: bounds.size)
let screenshot = renderer.image { _ in
    myUIView.drawHierarchy(in: bounds, afterScreenUpdates: true)
}
let renderer = UIGraphicsImageRenderer(size: newSize)
let combined = renderer.image { _ in
    background.draw(in: CGRect(origin: .zero, size: newSize))
    watermark.draw(in: CGRect(origin: .zero, size: watermarkSize))
}
UIGraphicsImageRenderer(size: newSize, format: UIGraphicsImageRendererFormat()).image { _ in
    image.draw(in: CGRect(origin: .zero, size: newSize))
}

Triggering Examples

UIGraphicsBeginImageContext(newSize)
myUIView.drawHierarchy(in: bounds, afterScreenUpdates: false)
let optionalScreenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIGraphicsBeginImageContext(newSize)
background.draw(in: CGRect(origin: .zero, size: newSize))
watermark.draw(in: CGRect(origin: .zero, size: watermarkSize))
let optionalOutput = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIGraphicsBeginImageContextWithOptions(newSize, true, 1.0)
image.draw(in: CGRect(origin: .zero, size: newSize))
let optionalOutput = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()