【问题标题】:How do I rotate objects before it is drawn within UIGraphicsImageRenderer?如何在 UIGraphicsImageRenderer 中绘制对象之前旋转对象?
【发布时间】:2020-12-29 12:05:56
【问题描述】:
    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))
    }

结果是这样的:

在上下文中绘制之前,如何旋转我的白色矩形,旋转中心位于矩形中间?

【问题讨论】:

  • 太晚了,你已经画好了。没有“绘制的对象”,只有像素。这些像素现在完成了。在绘制白色矩形之前,您应该已经转换了上下文。
  • @matt,我可以把旋转的矩形放在那里吗?
  • 是的,当然。但是你不能现在旋转它。
  • 你完全正确,我改变了我的问题。
  • 好的,但你不旋转矩形。您旋转上下文并将矩形绘制到其中。

标签: ios swift core-graphics


【解决方案1】:

您可以使用以下 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:) - 详情请参阅苹果文档)。

【讨论】:

  • 谢谢你,我去看看它是如何工作的......;)
  • 哇,它工作得很好......但是当我绘制 UIImage 时,它​​被倒置了。为什么?
  • 这可能无关 - 请创建一个新问题并分享您的代码。
  • @BartłomiejSemańczyk 这可能会有所帮助stackoverflow.com/a/64538344/2303865
  • @Bartłomiej Semańczyk 如果这回答了您的问题,请将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多