2011-08-11 39 views
8

Tôi đã có một MapView đó sẽ phóng to vị trí hiện tại sử dụng viewDidLoad:Đến/zoom với chức năng hiện tại vị trí (MapKit)

#define METERS_PER_MILE 1609.344 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    mapView.showsUserLocation=TRUE; 

    // zoom to a specific area 
    CLLocationCoordinate2D zoomLocation; 
    zoomLocation.latitude = -28.994167; 
    zoomLocation.longitude = 134.866944; 

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 1900*METERS_PER_MILE, 1900*METERS_PER_MILE); 
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];  

    // make sure the Google water mark is always visible 
    mapView.autoresizingMask = 
    (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 

    [mapView setRegion:adjustedRegion animated:YES];   

    mapView.delegate=self; 

    searchBar.delegate = self; 
} 

này hoạt động tốt. Tôi đã thêm một thanh tìm kiếm và một hàm để chuyển đến một vị trí địa chỉ cụ thể. Điều này cũng tốt. Bây giờ tôi muốn thêm một nút để quay lại vị trí hiện tại. Bạn có thể cho tôi một tay không?

Chúc mừng

Trả lời

10

Bạn cần đặt trung tâm bản đồ của mình thành vị trí hiện tại trên vòi của nút đó. Nói, như thế này:

- (IBAction)showCurrentLocation {   
    [mapView setCenterCoordinate:mapView.userLocation.location.coordinate animated:YES]; 
} 
+0

là có một chức năng gọi là setCenter? – carbonr

+0

@carbonr yes, có –

+12

[mapView setCenterCoordinate: mapView.userLocation.location.coordinate animated: YES]; – carbonr

2

bạn cũng có thể thử:

mapView.userTrackingMode=YES; 
mapView.userTrackingMode=NO; 
+0

Chỉ cần chắc chắn để gọi điều này trong phương thức viewDidAppear hoặc sau đó. – lehn0058

+1

'userTrackingMode' không phải là' BOOL'. Đó là enum 'MKUserTrackingMode'. Chỉ có lý do thiết lập nó thành 'YES' /' NO' "hoạt động" là vì 'YES' bằng' MKUserTrackingModeFollow' và 'NO' bằng với' MKUserTrackingModeNone'. Nhưng 'userTrackingMode' cũng có thể là giá trị thứ ba' MKUserTrackingModeFollowWithHeading'. – Anna

0
- (void)showCurrentLocation{ 

    MKMapPoint annotationPoint = MKMapPointForCoordinate(self.mapView.userLocation.coordinate); 
    MKMapRect zoomRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.0, 0.0); 
    [self.mapView setVisibleMapRect:zoomRect animated:YES]; 
} 
1

Bạn có thể liên kết IBAction này để UIButton của bạn, nó sẽ di chuyển bản đồ trên vị trí hiện tại và phóng to trên nó.

@IBOutlet weak var mapView: MKMapView! 

@IBAction func zoomToUserCurrentLocation(sender: AnyObject) { 
    if self.mapView != nil { 
     self.mapView.setRegion(MKCoordinateRegionMake(
      self.mapView.userLocation.coordinate, 
      MKCoordinateSpanMake(0.1, 0.1) 
     ), animated: true) 
    } 
} 

MKCoordinateSpan xác định khu vực được mở rộng bởi khu vực bản đồ, nhỏ hơn các giá trị này, gần bạn phóng to trên bản đồ.

0

CHO SWIFT

Thêm dòng này vào button action yourMKMapView.setUserTrackingMode(.follow, animated: true)

chắc chắn rằng bạn thêm yourMKMapView.showsUserLocation = true trong viewDidLoad()

Các vấn đề liên quan