regiondidchange 在应用加载时多次调用 swift
regiondidchange called several times on app load swift
我有一张地图,当我平移或输入一个位置并导航到它时,我想要一个简单的打印功能 运行。然而,我已经完成了这个,当我第一次加载应用程序时,它会多次调用该打印函数,直到它完成放大。有没有办法不计算应用程序加载区域变化的初始值?
终于在这里找到答案http://ask.ttwait.com/que/5556977
private var mapChangedFromUserInteraction = false
private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
let view = self.mapView.subviews[0]
// Look through gesture recognizers to determine whether this region change is from user interaction
if let gestureRecognizers = view.gestureRecognizers {
for recognizer in gestureRecognizers {
if( recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Ended ) {
return true
}
}
}
return false
}
func mapView(mapView: MKMapView, regionWillChangeAnimated animated:
Bool) {
mapChangedFromUserInteraction =
mapViewRegionDidChangeFromUserInteraction()
if (mapChangedFromUserInteraction) {
// user changed map region
}
}
func mapView(mapView: MKMapView, regionDidChangeAnimated animated:
Bool) {
if (mapChangedFromUserInteraction) {
// user changed map region
}
}
这是一个更简洁的 Swift 4.2 答案。
private var mapChangedFromUserInteraction = false
public func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if (mapChangedFromUserInteraction) {
// do something
}
}
private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
return map.subviews.first?.gestureRecognizers?
.contains(where: {
[=10=].state == .began || [=10=].state == .ended
}) == true
}
public func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
if !mapChangedFromUserInteraction { // I only wanted to check until this was true
mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction()
}
}
我有一张地图,当我平移或输入一个位置并导航到它时,我想要一个简单的打印功能 运行。然而,我已经完成了这个,当我第一次加载应用程序时,它会多次调用该打印函数,直到它完成放大。有没有办法不计算应用程序加载区域变化的初始值?
终于在这里找到答案http://ask.ttwait.com/que/5556977
private var mapChangedFromUserInteraction = false
private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
let view = self.mapView.subviews[0]
// Look through gesture recognizers to determine whether this region change is from user interaction
if let gestureRecognizers = view.gestureRecognizers {
for recognizer in gestureRecognizers {
if( recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Ended ) {
return true
}
}
}
return false
}
func mapView(mapView: MKMapView, regionWillChangeAnimated animated:
Bool) {
mapChangedFromUserInteraction =
mapViewRegionDidChangeFromUserInteraction()
if (mapChangedFromUserInteraction) {
// user changed map region
}
}
func mapView(mapView: MKMapView, regionDidChangeAnimated animated:
Bool) {
if (mapChangedFromUserInteraction) {
// user changed map region
}
}
这是一个更简洁的 Swift 4.2 答案。
private var mapChangedFromUserInteraction = false
public func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if (mapChangedFromUserInteraction) {
// do something
}
}
private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
return map.subviews.first?.gestureRecognizers?
.contains(where: {
[=10=].state == .began || [=10=].state == .ended
}) == true
}
public func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
if !mapChangedFromUserInteraction { // I only wanted to check until this was true
mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction()
}
}