SetUserTrackingMode не работает

Я программирую приложение карты на iPhone и хочу, чтобы карта вращалась, когда пользователь меняет свое направление. Я прочитал большинство сообщений в stackoverflow. Большинство из них предлагают использовать setUserTrackingMode с MKUserTrackingModeFollowWithHeading, если мы работаем с iOS 5 или более поздней версии. Это, кажется, не работает со мной по какой-то причине. Ниже приведен мой код:

-(IBAction)getLocation  //This is a button
{
    mapView.showsUserLocation=YES;  //mapView is the instance of MKMapView
    [mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
}

Это показывает только местоположение пользователя, но если я перемещаю телефон, он не вращается. Еще одна вещь: я скачал проект из Интернета и включил эту строку. Там он работал только в первый раз. Я понятия не имею, почему это происходит.

Какие-либо предложения?


person Autonomous    schedule 13.08.2012    source источник


Ответы (3)


Проще всего это сделать, включив MKUserTrackingBarButtonItem вместо создания собственной кнопки. Она действует точно так же, как кнопка в приложении «Карты» для iOS 5, и ее легко настроить.

Вот как это использовать:

// You should have an outlet to your map view called mapView
MKUserTrackingBarButtonItem *userTrackingButton;
userTrackingButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.mapView];

// You need an outlet to your toolbar too
[self.toolbar setItems:[NSArray arrayWithObject:userTrackingButton]];
person nevan king    schedule 15.08.2012
comment
Я добавил панель инструментов в файл .xib, а затем в файл ViewController.h, у меня есть: -(IBAction)track:(id)sender; Теперь в файле ViewController.m, в файле viewDidLoad: MKUserTrackingBarButtonItem *myButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.mapView]; [myButton setTarget:self]; [myButton setAction:@selector(track:)]; self.toolbarItems = [NSArray arrayWithObjects:myButton, nil]; [myButton release];, а затем где-то еще я определил track и добавил showsUserLocation и setUserTrackingMode. Я тоже моделирую местоположение, но карта не вращается. - person Autonomous; 17.08.2012
comment
Эта кнопка отвечает за цель и действие. Все, что вам нужно сделать, это дать ему представление карты, и он должен работать. - person nevan king; 17.08.2012
comment
Извините, я новичок в этом, не могли бы вы уточнить... так что мне просто написать MKUserTrackingBarButtonItem *trackButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:mapView];? Делая это, я не вижу, чтобы он добавлялся в окончательный вид (у меня есть приложение с одним представлением), или мне нужно поместить панель инструментов в файл .xib, а затем связать ее? - person Autonomous; 17.08.2012
comment
Вам нужно поместить его на панель инструментов, чтобы он появился. Я обновил свой ответ небольшим кодом. Убедитесь, что у вас есть выходы на карту и панель инструментов с теми же именами, что и я. - person nevan king; 17.08.2012

Вам нужно дождаться окончания загрузки MapView...

Подписаться:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
    mapView.userTrackingMode = MKUserTrackingModeFollow;
}

Подписаться и заголовок:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
    mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
}
person Ofir Malachi    schedule 04.01.2017

Измените «Анимированный» на «Анимированный» и повторите попытку.

person Craig    schedule 14.08.2012
comment
Извините за опечатку... все равно не работает, но программа работает нормально. - person Autonomous; 14.08.2012
comment
Есть ли способ подтвердить, что userTrackingMode действительно установлен? Если есть цикл или действие, которое вы можете запустить вручную, добавьте отладочный текст, который выводит trackingMode. Если это действительно установлено (и на вашем устройстве действительно есть компас), то нет никаких причин, по которым он не должен вращаться, как другие картографические приложения. - person Craig; 14.08.2012
comment
Я искал в соответствии с вашими предложениями и нашел похожую проблему [here](http://stackoverflow.com/questions/7941763/setting-mkusertrackingmodefollowwithheading). Там они устанавливают значение 2 для делегата MKUserFollowWithHeading' and then print it. Can anybody explain how to do that? Also, they report some erroneous behaviour. It seems to be solved by setting mapview` как self - person Autonomous; 14.08.2012
comment
может кто-нибудь объяснить мне, как напечатать значение setUserTrackingMode, упомянутое выше в этом комментарии? - person Autonomous; 14.08.2012
comment
Если ([mapview userTrackingMode] == mkusertrackingmodeFollow) NSLog(@follow); - person Craig; 14.08.2012
comment
Хорошо, я проверил приведенную выше команду и вижу, что follow выводится на консоль. Я попытался установить делегата mapView как самого себя, но все равно это не сработало. Я запускаю это приложение на симуляторе, случайно, это причина такого поведения? Я не думаю, что симулятор играет здесь какую-то роль, потому что я видел, как он работает на симуляторе. Любые другие идеи? - person Autonomous; 15.08.2012
comment
Кроме того, когда я устанавливаю mapView's делегата как self, я получаю предупреждение: Assigning to id <MKMapViewDelegate> from incompatible type 'FirstMapViewController *' что это значит? - person Autonomous; 15.08.2012
comment
Да, если вы используете это на симуляторе, вы не получите направление, если ваше устройство iOS не подключено и не имеет компаса. У вашего Mac нет компаса, не так ли? Что касается проблемы делегата, вы должны задать новый вопрос. Ответ будет заключаться в том, чтобы пометить ваш MapViewController как реализующий протокол MapViewDelegate. - person Craig; 15.08.2012