繁体   English   中英

如何正确旋转地图上的叠加层?

[英]How do you properly rotate an overlay on the map?

我创建了一个自定义叠加层,其中包含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)

您是否尝试过为旋转设置锚点? 设置锚点后,旋转将围绕视图的中心。

有点像:

[yourView.layer setAnchorPoint:CGPointMake( 0.5, 0.5 )]; // center of the view

有关更多详细信息,请参阅Apple文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM