Подтвердить что ты не робот

Проблемы с mapkit usertrackingwithheading mode на iOS 6

Я думаю, что, возможно, я обнаружил ошибку в 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 и без него с теми же результатами. Я был бы признателен, если кто-то может указать на любые ошибки, которые я делаю, или если они хотят построить проект и могут подтвердить, что это ошибка.

Заранее благодарим за любую помощь; -)

4b9b3361

Ответ 1

В настоящее время я изучаю подобное поведение в своем приложении при переходе с ios5 на ios6. Существует locationmanager, созданный как одноэлементный, как описано в

cllocationmanager singleton

Кроме того, в mapview я использую setusertrackingmode. В ios6 он переходит из MKUserTrackingModeFollowWithHeading в MKUserTrackingModeFollow взад и вперед. В ios5 он отлично работает с идентичным кодом. Возможно, что два управляющих местоположения находятся в конфликте друг с другом, как указано в

конфликт между двумя диспетчерами местоположения