2014-02-21 64 views
0

我有一個MKMapView,但當用戶第一次登錄並允許定位服務時,它不顯示位置。如果他們離開視線並回來,它就會起作用。我正在使用下面列出的內容來解決問題。它解決了這個問題,但用戶無法再進行縮放,因爲當更新位置時,會將其帶回指定的位置。如何在進行滾動工作時解決第一個問題。第一次使用MKMapView的問題

這裏是我使用的是什麼:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 

    MKUserLocation *myLocation = [self.schoolMap userLocation]; 
    CLLocationCoordinate2D coord = [[myLocation location] coordinate]; 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(coord, 9000, 9000); 
    [self.schoolMap setRegion:region animated:NO]; 
} 

回答

1

不要使用位置經理所有。只需告訴地圖視圖來跟蹤用戶的位置。然後實現此委託方法:

- (void)mapView:(MKMapView *)mapView 
     didUpdateUserLocation:(MKUserLocation *)userLocation { 
    CLLocationCoordinate2D coordinate = userLocation.location.coordinate; 
    MKCoordinateRegion reg = 
     MKCoordinateRegionMakeWithDistance(coordinate, 600, 600); 
    mapView.region = reg; 
} 

現在,將繼續努力,以每用戶移動時設置的地圖,所以如果你不希望這樣,添加一個布爾開關,讓你只能這樣做第一時間(當地圖第一個獲取用戶位置時)。

+0

我該如何使它只顯示第一次? – matthew

+0

添加一個BOOL開關(一個作爲標誌的實例變量),以便您知道這是否是第一次。 – matt

0

您設置區域時可能沒有收到用戶的位置信息。有一種方法通過讓的MapView處理這種情況顯示用戶的位置,只要它得到如下:

CLLocation *location = [[self.schoolMap userLocation] location]; 
bool hasLocation = location!=nil; 

if (!hasLocation) { 
    [self.mapView showsUserLocation]; 
} else { 
    CLLocationCoordinate2D zoomLocation = location.coordinate; 
    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 2000, 2000); 
    [self.mapView setRegion:viewRegion animated:NO]; 

注意這不要求你定期更新的位置。