gpt4 book ai didi

ios - 设置区域 : MKMapView becomes unresponsive

转载 作者:IT王子 更新时间:2023-10-29 05:14:41 26 4
gpt4 key购买 nike

我有一个 MKMapView,上面有 2 个按钮:放大和缩小。

我注意到,当我使用它们时,在动画完成之前我无法再捏合 map 进行缩放。

我的按钮连接到 setRegion 的范围比现在更小或更大。

我尝试将 UIPinchGestureRecognizer 添加到我的 map 以停止动画并允许捏合操作。这是我的做法:

我添加了一个 Bool 变量,用于保持 map 当前是否通过点击按钮进行动画处理。

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

我像这样覆盖 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
}

这些可以停止动画,但 map 本身无法识别缩放,即使我这样做了:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}

我猜 pinchRecognized 中的 setRegion 会破坏它,但我不知道还有什么方法可以停止动画。

按要求,按钮代码,两个按钮都用这个方法,放大用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)
}
}

编辑:我尝试在 gestureRecognizer:shouldRecognizeSimultaneouslyWith: 中设置 setRegion(停止动画的那个),但它没有动画 map 时不会被调用。

编辑:在尝试了@robinb 的建议后,我发现我的注释更新速度比我的 map 本身快,这表明区域已设置,它只是等待一些东西来直观地更新 map 。

最佳答案

手势识别器不会在正在动画的 View 上触发。将 View 保存在 ViewController 的变量/数组中。使用本文中的代码执行动画:https://stackoverflow.com/a/13814789/3970581

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

关于ios - 设置区域 : MKMapView becomes unresponsive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com