我正在实现UIView的子类,我动态调用它drawRect(_:)
。只能为更新的rect调用drawRect(_:)
。在视图画布中,我将绘图应用到相同大小的屏幕外图像缓冲区中,在drawRect(_:)
内,我提取更新后的子图像并绘制到当前上下文中。
我无法解决的问题是子图像被翻转绘制。我知道这是正常的,因为UIView的原点位于左上角,而裁剪的子图像的原点位于左下角。
当我使用以下代码在绘图之前翻转子图像时,不会发生绘图。如果我删除箭头所示的线条,我会看到更新后的子图像被翻转。你能告诉我我的仿射变换有什么问题吗?
override func draw(_ rect: CGRect) {
guard let _ = bufferImage else { return }
let scaleFactor = UIScreen.main.scale
let scaledRect = rect.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))
let croppedImage = bufferImage!.cgImage!.cropping(to: scaledRect)!
let context = UIGraphicsGetCurrentContext()!
context.scaleBy(x: 1.0, y: -1.0) // <------
context.translateBy(x: 0.0, y: -rect.height) // <------
context.draw(croppedImage, in: rect)
}