我有一個MKMapView
其上有2個按鈕:放大和縮小。setRegion:MKMapView變得沒有反應
我注意到,當我使用它們時,我不能捏地圖放大,直到動畫完成。
我把我的按鈕連接到setRegion
,比現在更小或更大的跨度。
我試着在我的地圖上添加一個UIPinchGestureRecognizer
來停止動畫並允許捏動作。以下是我如何做到這一點:
我添加了一個Bool
變量,該變量確保地圖當前是否從點擊按鈕開始動畫。
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
}
這些工作停止動畫,但捏不是由地圖本身放大的認可,即使我這樣做:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
我猜 pinchRecognized
打破它,但我不知道如何停止動畫。
按照要求,該按鈕的代碼,這兩個按鈕使用此方法,放大使用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)
}
}
編輯:我嘗試設置時停止動畫的setRegion
(一個)在gestureRecognizer:shouldRecognizeSimultaneouslyWith:
中,但在動畫地圖時不會調用它。
編輯:想什麼@robinb建議後,我看到我的註釋更新比我的地圖本身更快,這表明該區域被設置,它只是等待的東西在視覺上更新地圖。
你可以發佈你的按鈕方法代碼? – CodeChanger
@CodeChanger更新了問題 – vrwim
覆蓋setRegion:function?的任何特定原因? –