2010-01-29 6 views
2

MkMapView를 가지고 있으며 스코프 버튼을 누를 때 iPhone Map Application처럼 사용자의 위치에 맵을 집중시키고 싶습니다.iPhone MkMapView가 사용자 위치에 락 센터

확대/축소를 설정할 필요가 없기 때문에 setCenterCoordinate 메서드를 사용하고 있습니다. 위치 관리자에서 위치를 업데이트 할 때마다 사용합니다.

문제는 매초 반 (aprox)마다 업데이트되므로이 메서드는 "setCenterCoordinate"라고 항상 호출되며 App은 매달아 질 수 있습니다. 지도보기에서 멀리 떨어진 탭으로 전환해야 할 경우 다른 탭을 계속 눌러야합니다.

음,이 모든 텍스트는 MkMapView를 사용자 위치 (파란색 점)로 설정하는 올바른 방법이 있는지 묻는 것입니다.

감사

답변

7

는 이미 KVO 알림을 통해 MKMapViewuserLocation.location 재산의 업데이트를 얻는 대신 다른 위치 관리자를 사용하기위한 더 좋은 방법을 설명했습니다. How do I zoom an MKMapView to the users current location without CLLocationManager?

물론 KVO 알림을 수신하는 방법을 일부 변경해야합니다. 그런 뭔가 :

-(void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context { 

    if ([self.mapView isUserLocationVisible]) { 
     [self.mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate 
           animated:YES]; 
    } 
} 

이 코드를 테스트했는데 그것을 잘 작동합니다. ddnv의 대답에 추가

0

: 그런

결코 잊지는 (6.0 아이폰 OS < 또는 viewDidUnload)에의 ViewController의 viewWillDisappear에서 관찰자를 중지하는 방법 : 그렇지 않으면

[self.mapView.userLocation removeObserver:self forKeyPath:@"location"]; 

앱 하드 충돌합니다 .