gpt4 book ai didi

ios - 在 MKMapview 执行 SetRegion 动画函数调用时禁用触摸事件

转载 作者:行者123 更新时间:2023-11-28 13:13:26 25 4
gpt4 key购买 nike

我已经遇到这个问题几个月了,现在我正在寻求帮助。我已经尝试了很多东西。我的问题是,在我的 iOS 8 Swift 应用程序中,我使用的是 map 注释聚类,效果很好,当用户点击 map 上的聚类图钉时,mapView 会放大到该区域的中心,从而将注释 View 取消聚类使用函数 mapView.setRegion(region: myRegion, animated: true) 的单个 View (取决于注释的数量)。这工作得很好,关于它的一切都很可爱。

我的问题(这是我偶然发现的)是当我调用 setRegion 函数时,如果我尝试滚动到 map 上的不同位置, map 将开始动画放大虽然动画仍在发生,但我在控制台中出现以下输出时崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException' unrecognized selector sent to instance 0x126d0a890'

考虑到这一点,当我在 setRegion() 中将动画标志设置为 false 时,不会发生此崩溃。但我想做的是在 View 动画时禁用触摸事件,我认为这是在 setRegion 被调用时自动发生的,并将 userInteractionEnabled 默认设置为 false。

我试过这段代码没有成功

var center = view.annotation.coordinate
var span = MKCoordinateSpanMake(mapView.region.span.latitudeDelta/5.0, mapView.region.span.longitudeDelta/5.0)

mapView.userInteractionEnabled = false
mapView.scrollEnabled = false
mapView.rotateEnabled = false
mapView.setRegion(MKCoordinateRegionMake(center, span), animated: true)
mapView.userInteractionEnabled = true
mapView.scrollEnabled = true
mapView.rotateEnabled = true

我不知道该怎么做,因为我想保留动画。任何帮助将不胜感激。

最佳答案

setRegion 启动动画更新,它不会完成,很可能在代码中执行 setRegion 行后甚至不会开始。它是异步发生的。

这意味着禁用和重新启用用户交互无效。

在您的 Controller 中,您需要处理以下 MKMapViewDelegate 回调:

mapView(_:regionWillChangeAnimated:)

mapView(_:regionDidChangeAnimated:)

在动画开始前禁用用户交互和/或 map 更新,并在完成时启用。

关于ios - 在 MKMapview 执行 SetRegion 动画函数调用时禁用触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281959/

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