setRegion:MKMapView变得无法响应

vrw*_*wim 18 ios swift

我有一个MKMapView带2个按钮:放大和缩小.

我注意到,当我使用它们时,我无法再缩放地图以进行缩放,直到动画完成.

我把我的按钮挂setRegion在比现在更小或更大的跨度上.

我尝试UIPinchGestureRecognizer在地图上添加一个停止动画并允许捏合工作.我是这样做的:

我添加了一个Bool变量,用于保持地图当前是否通过按下按钮来设置动画.

func pinchRecognized() {
    if animating {
        var region = self.region
        region.span.latitudeDelta += 0.001
        setRegion(region, animated: false)
        animating = false
    }
}
Run Code Online (Sandbox Code Playgroud)

我重写了setRegion,如下所示:

override func setRegion(_ region: MKCoordinateRegion, animated: Bool) {
    if (animated)
    {
        animating = true
        super.setRegion(region, animated: animated)

        perform(#selector(noLongerAnimating), with: nil, afterDelay: 1)
    }
    else
    {
        super.setRegion(region, animated: animated)
    }
}

func noLongerAnimating() {
    animating = false
}
Run Code Online (Sandbox Code Playgroud)

这些工作可以停止动画,但是地图本身无法识别缩放,即使我这样做:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

我想setRegionpinchRecognized打破它,但我不知道该怎么停止动画.

按要求,按钮代码,两个按钮都使用此方法,放大使用0.5,缩小使用2:

func zoomTo(delta: Double, animated: Bool) {
    var region = self.region
    var span = region.span

    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    if (span.latitudeDelta < 180 && span.longitudeDelta < 180)
    {
        region.span = span
        setRegion(region, animated: animated)
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我尝试设置setRegion(停止动画的那个)gestureRecognizer:shouldRecognizeSimultaneouslyWith:,但在动画地图时不会调用它.

编辑:在尝试了@robinb建议之后,我看到我的注释比我的地图本身更快地更新,表明该区域已经设置,它只是等待某些东西可以直观地更新地图.

Rob*_*eel 2

手势识别器不会在正在动画化的视图上触发。将视图保存在 ViewController 的变量/数组中。使用本文中的代码来执行动画:/sf/answers/967035261/

这是测试项目:https://github.com/DuncanMC/iOS-CAAnimation-group-demo