在iOS 6上使用mapkit usertrackingwithheading模式时遇到问题

vic*_*on1 17 user-tracking mapkit ios6 ios6-maps

我想我可能已经在iOS4的mapkit API中发现了一个错误,但由于我仍然认为自己是一个新手,我想我会在这里查看是否有人可以指出我可能做错了什么.

我有一个应用程序,我已经工作了几个星期,在其中使用mapview并利用MKUserTrackingButton来切换跟踪模式.在iOS 5上它工作正常但是从升级到6它有奇怪的行为.当你将mapview放入跟踪带有标题的用户之后的跟踪模式时,如果你相对静止,它会很好,但是当你开始在汽车中移动时,每次回到常规跟踪模式时它会以航向模式退出轨道.经过许多令人沮丧的时间试图找出它后,我决定使用最小的mapview制作一个新的简单应用程序并跟踪,看看它是否只是我的编码或可能的错误.新的应用程序做同样的事情.我发布了以下所有代码.希望有人可以帮我告诉我,如果我做错了.

这是app delegate标题

//  iTrackerAppDelegate.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "TrackerViewController.h"

@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) IBOutlet UIWindow *window;

@end
Run Code Online (Sandbox Code Playgroud)

这是app委托实现

    //
    //  iTrackerAppDelegate.m
    //  iTracker
    //
    //  Created by Victor Hudson on 9/22/12.
    //  Copyright (c) 2012 Victor Hudson. All rights reserved.
    //

    #import "iTrackerAppDelegate.h"

    @implementation iTrackerAppDelegate

    @synthesize window = _window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        TrackerViewController *trackerView = [[TrackerViewController alloc] init];

        UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:trackerView];

        [self.window setRootViewController:navController];

        [[self window] makeKeyAndVisible];
        return YES;
    }

// the other app delegate methods are all empty so i left them out for brevity

    @end
Run Code Online (Sandbox Code Playgroud)

这是我的视图控制器.它有一个带有worldView的笔尖和一个用于切换地图模式的分段开关(普通,坐标和混合)TrackerViewController.h

//
//  TrackerViewController.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface TrackerViewController : UIViewController

@property (strong, nonatomic) IBOutlet MKMapView *worldView;

- (IBAction)toggleMapView:(id)sender;

@end
Run Code Online (Sandbox Code Playgroud)

TrackerViewController.m

//
//  TrackerViewController.m
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import "TrackerViewController.h"

@interface TrackerViewController ()

@end

@implementation TrackerViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    // navigation item
    [[self navigationItem] setTitle:@"iTracker"];

    MKUserTrackingBarButtonItem *trackingButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.worldView];
    [[self navigationItem] setRightBarButtonItem:trackingButton animated:YES];

    self.worldView.userTrackingMode = 1;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)toggleMapView:(id)sender {
    switch ([sender selectedSegmentIndex]) {
        case 0:
        {
            [self.worldView setMapType:MKMapTypeStandard];
        }break;
        case 1:
        {
            [self.worldView setMapType:MKMapTypeSatellite];
        }break;
        case 2:
        {
            [self.worldView setMapType:MKMapTypeHybrid];
        }break;
    }
}
@end
Run Code Online (Sandbox Code Playgroud)

正如我之前所说的那样似乎工作得很好但是当你移动速度非常快时跟踪带有航向模式.我在iPhone 4上运行,并且我已尝试使用和不使用ARC的应用程序获得相同的结果.如果有人能指出我正在制作的任何错误,或者他们想要构建项目并确认它是一个错误,我将不胜感激.

在此先感谢您的任何帮助;-)

小智 1

我目前正在调查从 ios5 到 ios6 时我的应用程序中的类似行为。有一个作为单例创建的位置管理器,如中所述

单例配置管理器

此外,在地图视图中,我正在使用 setusertrackingmode。在ios6中,它从MKUserTrackingModeFollowWithHeading来回跳转到MKUserTrackingModeFollow。在 ios5 中,它可以使用相同的代码正常工作。正如中所指出的,这两个位置经理可能相互冲突

两个地点经理之间的冲突