Я думаю, что, возможно, я обнаружил ошибку в API-интерфейсе mapkit для iOS 6, но, поскольку я все еще считаю себя новичком, я думал, что проверил бы здесь, чтобы узнать, может ли кто-нибудь указать на то, что я могу делать неправильно.
У меня есть приложение, над которым я работал в течение нескольких недель с картой в нем, и используя MKUserTrackingButton для переключения режимов отслеживания. На iOS 5 он работал нормально, но с момента обновления до 6 он имеет странное поведение. Когда вы помещаете mapview в режим отслеживания, который следует за пользователем с заголовком, он отлично работает, если вы относительно неподвижны, но когда вы начинаете движение в автомобиле, он каждый раз возвращается в режим трека с режимом отслеживания в обычный режим отслеживания. После многих разочаровывающих часов, пытаясь понять это, я решил сделать новое простое приложение с минимальным размером карты и отслеживанием, чтобы убедиться, что это просто мое кодирование или возможная ошибка. Новое приложение делает то же самое. Я размещаю весь код ниже. Надеюсь, кто-то может помочь мне сказать, что я делаю что-то неправильно или нет.
Здесь заголовок делегата приложения
// 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
Здесь реализация делегирования приложения
//
// 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
Здесь мой контроллер просмотра. Он имеет наконечник с 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
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, и Ive попробовал приложение с ARC и без него с теми же результатами. Я был бы признателен, если кто-то может указать на любые ошибки, которые я делаю, или если они хотят построить проект и могут подтвердить, что это ошибка.
Заранее благодарим за любую помощь; -)