gpt4 book ai didi

mapkit - iOS 6 上的 mapkit usertrackingwithheading 模式遇到问题

转载 作者:行者123 更新时间:2023-12-03 14:25:13 31 4
gpt4 key购买 nike

我想我可能在 iOS 6 的 mapkit API 中发现了一个错误,但由于我仍然认为自己是新手,我想我会在这里查看是否有人能指出我可能做错的事情。

我有一个应用程序已经工作了几个星期,其中有一个 map View ,并利用 MKUserTrackingButton 来切换跟踪模式。在 iOS 5 上它运行良好,但自从升级到 6 后,它出现了奇怪的行为。当您将 map View 置于跟随用户航向的跟踪模式时,如果您相对静止,它会很好,但是当您开始在汽车中移动时,它会在每次返回常规跟踪模式时以航向模式退出轨道。经过许多令人沮丧的小时试图弄清楚它,我决定制作一个新的简单应用程序,它具有最低限度的 map View 和跟踪,看看它是否只是我的编码或可能的错误。新应用程序做同样的事情。我在下面发布所有代码。希望有人可以帮助告诉我我是否做错了什么。

这是应用程序委托(delegate) header

//  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

这是应用程序委托(delegate)实现
    //
// 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

这是我的 View Controller 。它有一个带有世界 View 的 Nib 和一个用于切换 map 模式(普通、饱和和混合)的分段开关
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

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

正如我之前所说,一切似乎都可以正常工作,但是当您快速移动时使用航向模式进行跟踪。我在 iPhone 4 上运行,我尝试了使用和不使用 ARC 的应用程序以获得相同的结果。如果有人能指出我犯的任何错误,或者他们想要构建项目并确认它是一个错误,我将不胜感激。

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

最佳答案

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

cllocationmanager singleton

此外,在 map View 中,我正在使用 setusertrackingmode。在 ios6 中,它从 MKUserTrackingModeFollowWithHeading 来回跳转到 MKUserTrackingModeFollow。在 ios5 中,它使用相同的代码可以正常工作。
正如在

conflict between two locationmanagers

关于mapkit - iOS 6 上的 mapkit usertrackingwithheading 模式遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546524/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com