Prevent scrolling in a MKMapView, also when zooming

前端 未结 6 487
借酒劲吻你
借酒劲吻你 2020-12-03 03:09

The scrollEnabled seems to be breakable once the user starts pinching in a MKMapView.

You still can\'t scroll with one finger, but if y

6条回答
  •  南笙
    南笙 (楼主)
    2020-12-03 03:57

    Swift 3.0 version of @Paras Joshi answer https://stackoverflow.com/a/11954355/3754976

    with small animation fix.

    class MapViewZoomCenter: MKMapView {
    
        var originalRegion: MKCoordinateRegion!
    
        override func awakeFromNib() {
           self.configureView()
        }
    
        func configureView() {
            isZoomEnabled = false
            self.registerZoomGesture()
        }
    
        ///Register zoom gesture
        func registerZoomGesture() {
            let recognizer = UIPinchGestureRecognizer(target: self, action:#selector(MapViewZoomCenter.handleMapPinch(recognizer:)))
            self.addGestureRecognizer(recognizer)
        }
    
        ///Zoom in/out map
        func handleMapPinch(recognizer: UIPinchGestureRecognizer) {
    
            if (recognizer.state == .began) {
                self.originalRegion = self.region;
            }
    
            var latdelta: Double = originalRegion.span.latitudeDelta / Double(recognizer.scale)
            var londelta: Double = originalRegion.span.longitudeDelta / Double(recognizer.scale)
    
            //set these constants to appropriate values to set max/min zoomscale
            latdelta = max(min(latdelta, 80), 0.02);
            londelta = max(min(londelta, 80), 0.02);
    
            let span = MKCoordinateSpanMake(latdelta, londelta)
    
            self.setRegion(MKCoordinateRegionMake(originalRegion.center, span), animated: false)
    
        }
    }
    

提交回复
热议问题