如何实现随地图旋转的MKAnnotationViews

时间:2015-01-10 18:21:36

标签: ios rotation mapkit mkannotation mkannotationview

我有一个带有注释的应用程序,直到现在它们只是符合默认行为的符号(例如数字和字母)。它们的方向与设备的方向固定是合适的。

现在我需要一些需要在实际地图的方向上修复的注释,因此如果地图旋转,则注释符号需要随之旋转(例如,指示河流的箭头)。

我不希望它们像地图一样使用地图缩放,但我确实希望它们随地图一起旋转。

我需要一个解决方案,主要用于用户用手指手动旋转地图时,以及旋转时由于使用航向模式进行跟踪。

在Google地图上(至少在Android上)这很简单,只需一个简单的MarkerOptions.flat(true)

我确信在ios上它会变得更加困难,我希望。

提前致谢!

1 个答案:

答案 0 :(得分:5)

这是我用于类似事物的东西。

- (void)rotateAnnotationView:(MKAnnotationView *)annotationView toHeading:(double)heading
{
    // Convert mapHeading to 360 degree scale.
    CGFloat mapHeading = self.mapView.camera.heading;
    if (mapHeading < 0) {
        mapHeading = fabs(mapHeading);
    } else if (mapHeading > 0) {
        mapHeading = 360 - mapHeading;
    }

    CGFloat offsetHeading = (heading + mapHeading);
    while (offsetHeading > 360.0) {
        offsetHeading -= 360.0;
    }

    CGFloat headingInRadians = offsetHeading * M_PI / 180;
    annotationView.layer.affineTransform = CGAffineTransformMakeRotation(headingInRadians);
}

然后,这会在regionDidChange等中调用。

不幸的是,这个解决方案在用户旋转地图时不会旋转,但它会在之后自行修正,以确保它具有正确的标题。我将一些affineTransform包装到动画块中,使其看起来很漂亮。

希望这可以提供帮助,或者可以帮助您指明正确的方向。