在 UIGraphicsImageRenderer 中绘制之前如何旋转对象?
How do I rotate objects before it is drawn within UIGraphicsImageRenderer?
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 500, height: 500))
let image = renderer.image { context in
let size = renderer.format.bounds.size
UIColor.red.setFill()
context.cgContext.fillEllipse(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let x = 300 //center
let y = 100 //center
let w = 200
let h = 60
let r = 5.41 //radians
UIColor.white.setFill()
context.cgContext.fill(CGRect(x: x - w / 2, y: y - h / 2, width: w, height: h))
}
结果是这样的:
如何在上下文中绘制之前旋转我的白色矩形,旋转中心位于矩形的中间?
您可以使用以下 api 旋转上下文:
https://developer.apple.com/documentation/coregraphics/cgcontext/1456228-rotate
这就是您的示例的样子:
// applied 5 rectangles to visualize the rotation origin.
for i in 0...5 {
let r: CGFloat = 0.1 * CGFloat(i) //radians
context.cgContext.rotate(by: r)
UIColor.white.setFill()
context.cgContext.fill(CGRect(x: x - w / 2, y: y - h / 2, width: w, height: h))
}
请注意,旋转发生在上下文的原点周围。如果您想要一个不同的中心,您可能需要先申请翻译(translateBy(x:y:)
- 详情请参阅苹果文档)。
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 500, height: 500))
let image = renderer.image { context in
let size = renderer.format.bounds.size
UIColor.red.setFill()
context.cgContext.fillEllipse(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let x = 300 //center
let y = 100 //center
let w = 200
let h = 60
let r = 5.41 //radians
UIColor.white.setFill()
context.cgContext.fill(CGRect(x: x - w / 2, y: y - h / 2, width: w, height: h))
}
结果是这样的:
如何在上下文中绘制之前旋转我的白色矩形,旋转中心位于矩形的中间?
您可以使用以下 api 旋转上下文: https://developer.apple.com/documentation/coregraphics/cgcontext/1456228-rotate
这就是您的示例的样子:
// applied 5 rectangles to visualize the rotation origin.
for i in 0...5 {
let r: CGFloat = 0.1 * CGFloat(i) //radians
context.cgContext.rotate(by: r)
UIColor.white.setFill()
context.cgContext.fill(CGRect(x: x - w / 2, y: y - h / 2, width: w, height: h))
}
请注意,旋转发生在上下文的原点周围。如果您想要一个不同的中心,您可能需要先申请翻译(translateBy(x:y:)
- 详情请参阅苹果文档)。