Check whether zoom level changed

后端 未结 7 1891
余生分开走
余生分开走 2020-12-23 12:05

I\'m using MapKit on iPhone. How can I know when the user changes the zoom level (zoom in\\out the map)?

I\'ve tried to use mapView:(MKMapView *)mapView regi

7条回答
  •  执念已碎
    2020-12-23 12:41

    I have the following MKMapView category in which I include a method for quickly getting the current zoom level for the map:

    @implementation MKMapView (ZoomLevel)
    
    - (NSUInteger) zoomLevel {
        MKCoordinateRegion region = self.region;
    
        double centerPixelX = [MKMapView longitudeToPixelSpaceX: region.center.longitude];
        double topLeftPixelX = [MKMapView longitudeToPixelSpaceX: region.center.longitude - region.span.longitudeDelta / 2];
    
        double scaledMapWidth = (centerPixelX - topLeftPixelX) * 2;
        CGSize mapSizeInPixels = self.bounds.size;
        double zoomScale = scaledMapWidth / mapSizeInPixels.width;
        double zoomExponent = log(zoomScale) / log(2);
        double zoomLevel = 21 - zoomExponent;
    
        return zoomLevel;
    }
    
    @end
    

    To obtain the zoom level, you can call the following in your delegates and determine if the zoom level has changed:

    - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
        NSUInteger zoomLevel = [mapView zoomLevel];
    }
    

提交回复
热议问题