代码之家  ›  专栏  ›  技术社区  ›  Jeff Bootsholz

ios谷歌地图-如何在不缩放相机的情况下获取我的设备位置

  •  0
  • Jeff Bootsholz  · 技术社区  · 9 年前

    我正在按下按钮,以便定期获取我的位置。当涉及到实现时,该设备将让谷歌地图相机定期成为地图的中心,即使不使用GMSCameraUpdate进行对焦。请您告诉我要增强哪些功能,以便我们可以在不进行相机缩放的情况下定期获取更新的设备位置,好吗?

    以下是我在onClick后触发缩放的工作

     if(self.myMapView.myLocation !=nil){
            [self.locationManager stopUpdatingLocation];
            [CATransaction begin];
            [CATransaction setAnimationDuration:0.2];
            GMSCameraUpdate *move = [GMSCameraUpdate setTarget:self.myMapView.myLocation.coordinate  zoom:self.myMapView.camera.zoom];
            [self.myMapView animateWithCameraUpdate:move];
            [CATransaction commit];
        }
    

    获取位置后委派

    - (void)locationManager:(CLLocationManager *)manager
         didUpdateLocations:(NSArray *)locations{
        CLLocation *location = [locations lastObject];
    
    
        if(location==nil){
            location = self.myMapView.myLocation;
        }
    
        myDeviceLocation = location;
    
        NSLog(@"adasdads zoom ");
        if (markera == nil) {
            markera = [[GMSMarker alloc] init] ;
            markera.position   = CLLocationCoordinate2DMake(22.2855200, 114.1576900);
            markera.groundAnchor = CGPointMake(0.5f, 0.97f); // Taking into account walker's shadow
    
            markera.map = self.myMapView;
    
    
        }else {
            [CATransaction begin];
            [CATransaction setAnimationDuration:2.0];
            markera.position = location.coordinate;
            markera.icon = nil;
            [CATransaction commit];
    
        }
    
        GMSCameraUpdate *move = [GMSCameraUpdate setTarget:location.coordinate zoom:17];
        [self.myMapView animateWithCameraUpdate:move];
    }
    
    
    
    -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)statusX {
    
        NSLog(@"status  : %d" , statusX);
        if (status == kCLAuthorizationStatusDenied) {
            //location denied, handle accordingly
            NSLog(@"denied ");
    
        }
    else if (statusX == kCLAuthorizationStatusAuthorized) {
        //hooray! begin startTracking
        NSLog(@"proceed ");
        dispatch_async(dispatch_get_main_queue(), ^{
            self.myMapView.myLocationEnabled = YES;
        });
    
    
    
    }else   if (statusX == kCLAuthorizationStatusAuthorizedAlways || statusX == kCLAuthorizationStatusAuthorizedWhenInUse) {
        self.myMapView.myLocationEnabled = YES;
    
        NSLog(@"gogogo ");
        dispatch_async(dispatch_get_main_queue(), ^{
          //  self.myMapView.myLocationEnabled = YES;
        });
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   rmp    9 年前

    你可以试试这个

    从您的 didUpdateLocations 代表:

    GMSCameraUpdate *move = [GMSCameraUpdate setTarget:location.coordinate zoom:17];
    [self.myMapView animateWithCameraUpdate:move];
    

    将其移动到一个新函数,以便稍后调用。

    在里面 did更新位置 设置新用户位置,然后调用 [locationManager stopUpdatingLocation] 然后调用新的自定义函数来设置相机。

    在新的自定义函数中,更改:

    [self.myMapView animateWithCameraUpdate:move];

    收件人:

    CLLocationCoordinate2D target = myLocation;  //2d coord
    self.myMapView.camera = [GMSCameraPosition cameraWithTarget:target zoom:17];