Search code examples
iosobjective-cgoogle-mapsgoogle-maps-sdk-ios

Google Maps SDK for iOS issue when rotating to landscape


I have a Google Map from the Google Maps SDK for iOS (last version). I display a map like this in a UIScrollerView:

showMarker = YES;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:[geocodeLatitude floatValue] longitude:[geocodeLongitude floatValue] zoom:13];
[self setupMapWithCamera:camera withLatitude:geocodeLatitude withLongitude:geocodeLongitude];

float mapHeight = 50;
[mapView_ setFrame:CGRectMake(0, 0, widthOfBlock, mapHeight)];
[self.scroller addSubview:mapView_];

The method called is:

-(void)setupMapWithCamera:(GMSCameraPosition *)camera withLatitude:(NSString *)Slatitude withLongitude:(NSString *)Slongitude {
    // setup map
    [mapView_ clear];
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView_.settings.scrollGestures = NO;
    mapView_.settings.zoomGestures = NO;

    // setup marker
    if (geocodesuccess || showMarker) {
        GMSMarker *marker = [[GMSMarker alloc] init];
        marker.position = CLLocationCoordinate2DMake([Slatitude floatValue], [Slongitude floatValue]);
        if ([ShopWithDatas.open isEqualToString:@"1"] || [ShopWithDatas.open2424 isEqualToString:@"1"]) {
            marker.icon = [GMSMarker markerImageWithColor:[UIColor greenColor]];
        } else {
            marker.icon = [GMSMarker markerImageWithColor:[UIColor redColor]];
        }
        [mapView_ setSelectedMarker:marker];
        marker.map = mapView_;
    }    
}

So, it works when you enter in this view from Portrait => Portrait. It works when you enter in this view from Landscape => Landscape.

But the camera is not centered anymore when you go from Portrait => Portrait and then in the view change to Landscape. Plus, It works when you enter this view from Landscape => Landscape and then turn into Portrait.

Any idea how to fix the camera for Portrait => Landscape issue ?


Solution

  • Finally, even if I don't get why it does not update correctly, I found this solution:

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
        if (canIshowMap) {
            CLLocationCoordinate2D actualLocation = CLLocationCoordinate2DMake([geocodeLatitude floatValue], [geocodeLongitude floatValue]);
            GMSCameraUpdate *updatedCamera = [GMSCameraUpdate setTarget:actualLocation];
            [mapView_ moveCamera:updatedCamera];
            //[mapView_ animateToLocation:actualLocation];        
        }
    }
    

    Please note that the commented line does not fix the bug.