【问题标题】:Programmatically rotating a MKMapView in iOS7在 iOS7 中以编程方式旋转 MKMapView
【发布时间】:2013-09-21 19:42:39
【问题描述】:

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

有没有办法在不使用 CGAffineTransformMakeRotation 的情况下在代码中旋转地图?

我查看了 MKMapCamera,希望可以将其操纵为传递静态值来操纵地图,但无法手动设置 centerCoordinate 和 eyeCoordinate。

【问题讨论】:

  • 这个应用还在应用商店上架吗?
  • 是的,该应用程序(Focus Golf)仍在应用程序商店中,现在它已得到纠正,并且使用下面 Nevans 的回答可以很好地工作。

标签: ios mkmapview ios7


【解决方案1】:

您可以通过使用-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];
    }

}

【讨论】:

  • @nevanking 你好,为什么我们要复制 mapView 相机?为什么我们不使用这个实例?它会导致内存或其他一些问题吗?
  • @coolcool1994 我编写了这个代码,这样做是有原因的,你不明白。如果你按照自己的方式去做,就没有动画。如果你想要一个动画,你使用方法setCamera:animated:
  • @coolcool1994 你可以试试,但它不会构建,因为MKMapCamera 没有setHeading:animated: 方法。
  • 如果有某种通用的 UIView 方法可以为任何动画属性设置动画就好了。
  • 要是有办法让讽刺更明显就好了。
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2015-06-21
  • 2013-03-24
相关资源
最近更新 更多