Google Maps iOS SDK, Getting Current Location of user

前端 未结 7 2406
渐次进展
渐次进展 2020-12-01 04:49

For my iOS app (building in iOS7),i need to show user\'s current location when the app load.I am using Google Maps iOS SDK. I am follo

7条回答
  •  醉酒成梦
    2020-12-01 05:18

    Forget my previous answer. It works well if you use the native MapKit.framework.

    In fact GoogleMaps for iOS do all the work for you. You don't have to use CoreLocation directly.

    The only thing you have to do is to add yourMapView.myLocationEnabled = YES; and the framework will do everything. (Except center the map on you position).

    What I have done : I simply followed the steps of the following documentation. And I got a map centered on Sydney but if I zoomed out and moved to my place (if you use a real device, otherwise use simulator tools to center on Apple's location), I could see the blue point on my position.

    Now if you want to update the map to follow your position, you can copy Google example MyLocationViewController.m that is included in the framework directory. They just add a observer on the myLocation property to update the camera properties:

    @implementation MyLocationViewController {
      GMSMapView *mapView_;
      BOOL firstLocationUpdate_;
    }
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                              longitude:151.2086
                                                                   zoom:12];
    
      mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
      mapView_.settings.compassButton = YES;
      mapView_.settings.myLocationButton = YES;
    
      // Listen to the myLocation property of GMSMapView.
      [mapView_ addObserver:self
                 forKeyPath:@"myLocation"
                    options:NSKeyValueObservingOptionNew
                    context:NULL];
    
      self.view = mapView_;
    
      // Ask for My Location data after the map has already been added to the UI.
      dispatch_async(dispatch_get_main_queue(), ^{
        mapView_.myLocationEnabled = YES;
      });
    }
    
    - (void)dealloc {
      [mapView_ removeObserver:self
                    forKeyPath:@"myLocation"
                       context:NULL];
    }
    
    #pragma mark - KVO updates
    
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context {
      if (!firstLocationUpdate_) {
        // If the first location update has not yet been recieved, then jump to that
        // location.
        firstLocationUpdate_ = YES;
        CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];
        mapView_.camera = [GMSCameraPosition cameraWithTarget:location.coordinate
                                                         zoom:14];
      }
    }
    
    @end
    

    With the doc I gave you and the samples included in the framework you should be able to do what you want.

提交回复
热议问题