2012-06-02 4 views
2

У меня есть рабочее приложение с MKMapView, показывающее местоположение пользователя. До сих пор так хорошо:Вращающийся MKMapView

- (void)viewDidLoad { 
    ... 
    [myMapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
    [myMapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]; 
} 

Теперь я позволяю интерфейс вращения:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations. 
    return YES; 
} 

Если я теперь включить устройство и центр к месту пользователя

[myMapView setCenterCoordinate:[myMapView userLocation].coordinate animated:YES]; 

MAPview будет вращаться как и ожидалось, но местоположение пользователя не будет центрировано, а в нижней части экрана (расстояние от вершины остается таким же, как в портретном режиме).

Я ожидаю, что это будет в центре, хотя ...

Любые идеи?

ответ

4

Попробуйте включить высоту в setAutoresizingMask:, чтобы высота отображения карты автоматически изменилась, когда супервизор изменит свою высоту при вращении. Прямо сейчас, только ширина изменяет размер, и поэтому позиция y центра карты не изменяется.

Так эта линия:

[myMapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

должно быть:

[myMapView setAutoresizingMask: 
    (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; 


Кроме того, вам не нужно вручную центрировать карту по месту нахождения пользователя, если вы устанавливаете режим слежения до MKUserTrackingModeFollow (карта будет делать это автоматически). Возможно, вы попытались вручную центрировать его, чтобы исправить проблему с высотой, но исправление маски авторезистировки должно устранить необходимость явного центрирования.

+0

Ok Спасибо - должен был прочитать имя флага до конца :) И относительно центрирования: я на самом деле центрирован для разных точек, а не только для местоположения пользователя в зависимости от пользовательского ввода. Но спасибо, что указали это ... – Axel