在 MKMapview 执行 SetRegion 动画函数调用时禁用触摸事件
Disable touch events while MKMapview is doing SetRegion Animated function call
我已经遇到这个问题几个月了,现在我正在寻求帮助。我已经尝试了很多东西。我的问题是,在我的 iOS 8 Swift 应用程序中,我使用的地图注释聚类效果很好,当用户点击地图上的聚类图钉时,mapView 会放大到该区域的中心它使用函数 mapView.setRegion(region: myRegion, animated: true)
将注释视图分解为单独的视图(取决于注释的数量)。这工作得很好,关于它的一切都很可爱。
我的问题(这是我偶然发现的)是当我调用 setRegion
函数时,如果我尝试滚动到地图上的不同位置,地图开始以动画方式放大动画仍在发生我在控制台中出现以下输出时崩溃:
Terminating app due to uncaught exception 'NSInvalidArgumentException'
unrecognized selector sent to instance 0x126d0a890'
考虑到这一点,当我在 setRegion()
中将动画标志设置为 false
时,不会发生此崩溃。但我想做的是在视图动画时禁用触摸事件,我认为当 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 行后甚至不会启动。它是异步发生的。
这意味着禁用和重新启用用户交互无效。
在您的控制器中,您需要处理以下 MKMapViewDelegate 回调:
mapView(_:regionWillChangeAnimated:)
mapView(_:regionDidChangeAnimated:)
禁用用户交互and/or 地图在动画开始前更新并在完成后启用。
我已经遇到这个问题几个月了,现在我正在寻求帮助。我已经尝试了很多东西。我的问题是,在我的 iOS 8 Swift 应用程序中,我使用的地图注释聚类效果很好,当用户点击地图上的聚类图钉时,mapView 会放大到该区域的中心它使用函数 mapView.setRegion(region: myRegion, animated: true)
将注释视图分解为单独的视图(取决于注释的数量)。这工作得很好,关于它的一切都很可爱。
我的问题(这是我偶然发现的)是当我调用 setRegion
函数时,如果我尝试滚动到地图上的不同位置,地图开始以动画方式放大动画仍在发生我在控制台中出现以下输出时崩溃:
Terminating app due to uncaught exception 'NSInvalidArgumentException' unrecognized selector sent to instance 0x126d0a890'
考虑到这一点,当我在 setRegion()
中将动画标志设置为 false
时,不会发生此崩溃。但我想做的是在视图动画时禁用触摸事件,我认为当 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 行后甚至不会启动。它是异步发生的。
这意味着禁用和重新启用用户交互无效。
在您的控制器中,您需要处理以下 MKMapViewDelegate 回调:
mapView(_:regionWillChangeAnimated:)
mapView(_:regionDidChangeAnimated:)
禁用用户交互and/or 地图在动画开始前更新并在完成后启用。