gpt4 book ai didi

ios - 如何正确旋转 map 上的叠加层?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:42 25 4
gpt4 key购买 nike

我为 iOS 应用创建了一个包含几何形状的自定义叠加层。我想围绕它的中心(或者更确切地说是 boundingMapRect 的中心)旋转它。据我了解,使用 CGContextRotateCTM(contextRef, angle) 使用 boundingMapRect 的左上角作为原点旋转叠加层,因此如果我顺时针旋转少量叠加层,它会出现在其先前位置的下方和左侧。

我想,如果我可以捕获叠加层边界矩形的初始中心,然后是旋转后的中心,那么我就可以计算坐标差并使用 CGContextTranslateCTM 重新定位叠加层。我的问题是 CGContextRotateCTM 调用前后中心位置相同。有什么方法可以强制该调用生效,以便我可以获得新的中心位置吗?有更好的方法吗?

我看到一些关于使用叠加层宽度和高度的一半来重新定位的引用资料,但我不明白这有什么帮助,因为它是恒定的。

谢谢。

最佳答案

这是我的解决方案,在 swift 3 上运行:

假设 centerPoint 是您要旋转的 CGPoint

let a = sqrt(pow(centerPoint.x, 2.0) + pow(centerPoint.y, 2.0))

let sub1 = (centerPoint.y / a) * cos(angle / 2.0)
let sub2 = (centerPoint.x / a) * sin(angle / 2.0)
let deltaX = -2 * a * sin((0 - angle) / 2.0) * (sub1 + sub2)

let sub3 = (centerPoint.x / a) * cos(angle / 2.0)
let sub4 = (centerPoint.y / a) * sin(angle / 2.0)
let deltaY = 2 * a * sin((0 - angle) / 2.0) * (sub3 - sub4)

context.translateBy(x: deltaX, y: deltaY)

context.rotate(by: angle)

关于ios - 如何正确旋转 map 上的叠加层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5994789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com