mapkit ios6 user-tracking ios6-maps

Problemas con el seguimiento de usuarios de mapkit en modo de encabezado en iOS 6



ios6 user-tracking (1)

Creo que puedo haber descubierto un error en la API de mapkit para iOS 6, pero como todavía me considero un novato, pensé que revisaría aquí para ver si alguien puede señalar algo que pueda estar haciendo mal.

Tengo una aplicación en la que he estado trabajando durante unas semanas con una vista de mapa y utilizando el MKUserTrackingButton para alternar los modos de seguimiento. En iOS 5 funcionaba bien, pero desde la actualización a 6 tiene un comportamiento extraño. Cuando coloca la vista del mapa en El modo de seguimiento que sigue al usuario con rumbo, funciona bien si está relativamente parado, pero cuando comienza a moverse en un automóvil, se sale de la pista con el modo de rumbo cada vez que vuelve al modo de seguimiento normal. Después de muchas horas frustrantes tratando de averiguarlo, decidí crear una nueva aplicación simple con el mínimo mapa de seguimiento y seguimiento para ver si era solo mi codificación o un posible error. La nueva aplicación hace lo mismo. Estoy publicando todo el código de abajo. Esperemos que alguien pueda ayudarme a decirme si estoy haciendo algo mal o no.

Aquí está el encabezado delegado de la aplicación

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

Aquí está la aplicación delegado de implementación

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

Aquí está mi controlador de vista. Tiene una punta con el worldView en ella y un interruptor segmentado para alternar modos de mapa (plano, satelital e híbrido) 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

Como dije antes, todo parece funcionar bien, pero el seguimiento con modo de rumbo cuando se está moviendo muy rápido. Me estoy ejecutando en un iPhone 4 y he probado la aplicación con y sin ARC con los mismos resultados. Estaría agradecido si alguien puede señalar los errores que estoy cometiendo o si quieren construir el proyecto y confirmar que se trata de un error.

Gracias de antemano por cualquier ayuda ;-)


Actualmente estoy investigando un comportamiento similar en mi aplicación al pasar de ios5 a ios6. Hay un administrador de ubicación creado como un singleton como se describe en

cllocationmanager singleton

Además en el mapview estoy usando setusertrackingmode. En ios6 salta de MKUserTrackingModeFollowWithHeading to MKUserTrackingModeFollow de ida y vuelta. En ios5 funciona bien con código idéntico. Puede ser que los dos gerentes de localización estén en conflicto entre sí como se señala en

conflicto entre dos gerentes de localización