在iOS7中以编程方式旋转MKMapView

18

我有一个应用程序,目前使用CGAffineTransformMakeRotation来操作MKMapView以显示正确方向和大小的地图。但是在iOS7发布后,该方法变得不可靠(地图中心点不断偏移)。我希望通过更可靠的解决方案来解决这个问题。

是否有一种不使用CGAffineTransformMakeRotation的方法在代码中旋转地图?

我查看了MKMapCamera,希望能够将其操作为传递静态值以操纵地图,但没有办法手动设置centerCoordinate和eyeCoordinate。


这个应用程序已经上架到应用商店了吗? - AlexWien
是的,应用程序(Focus Golf)仍然在应用商店上,并且现在已经通过Nevans的答案进行了修正,运行得非常好。 - Andrin
1个回答

32

你可以通过使用 -setCamera:animated: 方法并设置一个新的 MKMapCamera 对象来旋转和倾斜地图。

要进行旋转,请给它一个新的 heading 参数:

- (void)viewDidAppear:(BOOL)animated // or wherever works for you
{
    [super viewDidAppear:animated];

    if ([mapView respondsToSelector:@selector(camera)]) {
        MKMapCamera *newCamera = [[mapView camera] copy];
        [newCamera setHeading:90.0]; // or newCamera.heading + 90.0 % 360.0
        [mapView setCamera:newCamera animated:YES];
    }
}

您还可以通过改变俯仰角和高度来实现更炫酷的缩放效果,并显示建筑物:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if ([mapView respondsToSelector:@selector(camera)]) {
        [mapView setShowsBuildings:YES];
        MKMapCamera *newCamera = [[mapView camera] copy];
        [newCamera setPitch:45.0];
        [newCamera setHeading:90.0];
        [newCamera setAltitude:500.0];
        [mapView setCamera:newCamera animated:YES];
    }

}

1
@nevanking 你好,为什么我们要复制mapView相机?为什么不能直接使用这个实例?这样做会导致内存或其他问题吗? - Dima Deplov
4
@coolcool1994,我写的代码是有原因的,你可能不理解。如果按照你的方式来做,就没有动画效果。如果你想要动画效果,需要使用方法setCamera:animated: - nevan king
1
@coolcool1994,你可以尝试这样做,但是它不会构建,因为MKMapCamera没有setHeading:animated:方法。 - nevan king
1
如果有一种通用的UIView方法可以动画化任何可动画属性就好了。 - tooluser
6
要是有什么方法能让讽刺更明显就好了。 - tooluser
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接