Iphone 使用指南针方向旋转地图视图

Iphone 使用指南针方向旋转地图视图,iphone,cocoa-touch,iphone-3gs,Iphone,Cocoa Touch,Iphone 3gs,是否可以将嵌入式MKMapView旋转以始终面向iPhone所面对的方向?基本上,我想在我自己的应用程序上模拟地图应用程序旋转功能 我看到iphonesdk没有公开这些功能。但是,我想知道使用cGraffineTransformMakeRotate旋转整个视图是否可行。它会影响点击和缩放吗?有更好的方法吗?如果您查看3.0版iPhone应用程序编程指南中的设备支持下的内容,您将找到有关磁强计(又称指南针)的信息。一旦开始获取航向信息(通过didUpdateHeading方法),您应该能够获取指南

是否可以将嵌入式
MKMapView
旋转以始终面向iPhone所面对的方向?基本上,我想在我自己的应用程序上模拟地图应用程序旋转功能


我看到iphonesdk没有公开这些功能。但是,我想知道使用
cGraffineTransformMakeRotate
旋转整个视图是否可行。它会影响点击和缩放吗?有更好的方法吗?

如果您查看3.0版iPhone应用程序编程指南中的
设备支持
下的内容,您将找到有关磁强计(又称指南针)的信息。一旦开始获取航向信息(通过
didUpdateHeading
方法),您应该能够获取指南针数据,然后使用该数据计算要应用于地图视图的正确旋转变换值

不确定它是否能处理缩放。在标准地图应用程序中,我注意到一旦开始缩放,罗盘航向跟踪就会停止


另外,请记住,位置方向以度为单位,而变换旋转角度以弧度为单位。

我可以确认它工作正常。以下是我正在使用的代码:

[mapView setTransform:CGAffineTransformMakeRotation(-1 * currentHeading.magneticHeading * 3.14159 / 180)];

mapView
是我的MKMapView实例

用于旋转mapView,而不是注释。您可以使用以下代码来补偿贴图旋转

- (void)locationManager:(CLLocationManager *)manager
       didUpdateHeading:(CLHeading *)newHeading
{
  double rotation = newHeading.magneticHeading * 3.14159 / 180;
  CGPoint anchorPoint = CGPointMake(0, -23); // The anchor point for your pin

  [mapView setTransform:CGAffineTransformMakeRotation(-rotation)];

  [[mapView annotations] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    MKAnnotationView * view = [mapView viewForAnnotation:obj];

    [view setTransform:CGAffineTransformMakeRotation(rotation)];
    [view setCenterOffset:CGPointApplyAffineTransform(anchorPoint, CGAffineTransformMakeRotation(rotation))];

  }];

}

另一个解决方案是使用iOS 5中添加到MKMapView的新方法

看看:


-(void)setUserTrackingMode:(MKUserTrackingMode)模式动画:(BOOL)动画

如果使用NavigationVoController,请尝试以下操作:

//For Left button
 MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem 
                                                 alloc]initWithMapView:_mapView];

 self.navigationItem.leftBarButtonItem = buttonItem;


// For Right Button
     MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem 
                                                     alloc]initWithMapView:_mapView];

     self.navigationItem.rightBarButtonItem = buttonItem;

swift 3.0中的简单解决方案。确保将该行放入
mapViewDidFinishLoadingMap
中,否则它将忽略该行

public func mapViewDidFinishLoadingMap(_ mapView: MKMapView)
{
    mapView.setUserTrackingMode(.followWithHeading, animated: false)
}
如果您不希望地图以用户位置为中心,您可以这样做

public func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
{
    if(CLLocationCoordinate2DIsValid(mapView.centerCoordinate))
    {
        mapView.camera.heading = newHeading.trueHeading
    }
}

上面的代码可以旋转地图视图,但是注释呢?如何将转换应用到这些方面呢?我已经为您下面的问题发布了一个答案。将此功能引入iOS6如何?我们能把地图向北旋转吗?我试图确定地图的方位,但失败了。