首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MKMapView映射模式下设置MKMapCamera时的怪异MKUserTrackingModeFollowWithHeading行为

在MKMapView映射模式下设置MKMapCamera时的怪异MKUserTrackingModeFollowWithHeading行为
EN

Stack Overflow用户
提问于 2013-10-26 12:21:46
回答 2查看 5.7K关注 0票数 11

在与MKMapView和MKMapCamera合作时,我注意到了奇怪的行为。我需要实现一些苹果地图应用程序的标准行为。基本上,当地图视图的用户跟踪模式设置为MKUserTrackingModeFollowWithHeading.时,我需要的是能够在2D和3D模式之间切换

目前,当MKUserTrackingModeNone设置为userTrackingMode时,我的解决方案工作良好,但它在其他模式下执行奇怪的动画(不管i setCamera: setCamera:是还是否)。当我记录相机参数之前和之后设置新的,唯一的区别是我的变化在音高。

另一个问题是改变相机的高度,通过编程放大或缩小。在IBAction方法中,我试图用捏入或伸出手势来模拟缩放。在followWithHeadingMode地图中,总是返回到“默认”缩放级别(相机的高度),而在其他模式下效果很好。

我启动了样例项目来检查发生了什么,这是我的单一视图应用程序的视图控制器,在这里出现了问题:

代码语言:javascript
复制
#import "CCViewController.h"

@interface CCViewController ()
@end

@implementation CCViewController

- (void)viewDidLoad{
    [super viewDidLoad];
}

- (void)setUpMap{
    [self.mapView setShowsUserLocation: YES];
}

- (void)viewDidAppear:(BOOL)animated{
    [self setUpMap];
}

- (IBAction)mapModeSwitchClicked:(id)sender {
    MKMapCamera *newCamera = [MKMapCamera camera];
    newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
    newCamera.heading = self.mapView.camera.heading;
    newCamera.altitude = self.mapView.camera.altitude;

    if(!self.mapView.camera.pitch){
        newCamera.pitch = 50;
        self.mapModeSwitch.title = @"2D";
    }
    else{
        newCamera.pitch = 0;
        self.mapModeSwitch.title = @"3D";
    }

    [self.mapView setCamera:newCamera animated:YES];
}

- (IBAction)locateMeButtonClicked:(id)sender {

        if(self.mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading)
            [self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
        else
            [self.mapView setUserTrackingMode:MKUserTrackingModeNone animated:YES];
}

- (void)zoomMapWithZoomFactor:(double)factor{
    MKMapCamera *newCamera = [MKMapCamera camera];
    newCamera.pitch = self.mapView.camera.pitch;
    newCamera.heading = self.mapView.camera.heading;
    newCamera.altitude = self.mapView.camera.altitude * factor;
    newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;

    [self.mapView setCamera:newCamera animated:YES];
}

- (IBAction)zoomInClicked:(id)sender {
    [self zoomMapWithZoomFactor: 0.5];
}

- (IBAction)zoomOutClicked:(id)sender {
     [self zoomMapWithZoomFactor: 2];
}


@end

我要找的是类似于苹果地图应用程序的行为。你有什么想法吗?我做错什么了?

EN

回答 2

Stack Overflow用户

发布于 2013-11-04 15:05:38

我相信这是MapKit中的一个bug。在启用MKUserTrackingModeFollowWithHeading时,我对编程缩放进行了类似的观察:地图很快就会缩小,但一旦收到下一个位置更新,就会返回到以前的缩放级别。

请参见rdar://15374402 (MapKit: UserTracking期间的编程缩放)和rdar://15374604 (MKUserTrackingModeFollow禁止在边缘选择注释)。

我的建议是:只要您希望对显示的地图区域进行编程控制,就不要使用MKUserTrackingModeFollow和MKUserTrackingModeFollowWithHeading。

票数 6
EN

Stack Overflow用户

发布于 2016-05-05 14:21:18

iOS9更新

它也有同样的效果:“高度放大了一点”。

但这种影响只有在

代码语言:javascript
复制
[self.mapView setCamera:newCamera animated:NO];

使用*animated:YES*时不使用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19606648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档