Mam MKMapView
z 2 przyciskami: powiększ i pomniejsz.setRegion: MKMapView przestaje reagować
Zauważyłem, że kiedy ich używam, nie mogę uszczypnąć mapy, aby powiększyć, dopóki animacja nie zostanie wykonana.
Mam guziki podpięte do setRegion
na mniejszej lub większej rozpiętości niż jest teraz.
Próbowałem dodać do mojej mapy UIPinchGestureRecognizer
, aby zatrzymać animację i zezwolić na uszczypnięcie. Oto, jak to zrobiłem:
Dodałem zmienną Bool
, która określa, czy mapa jest aktualnie animowana po dotknięciu przycisków.
func pinchRecognized() {
if animating {
var region = self.region
region.span.latitudeDelta += 0.001
setRegion(region, animated: false)
animating = false
}
}
zastąpić setRegion tak:
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
}
te działają w zatrzymanie animacji, ale szczypta nie jest rozpoznawany przez mapę sama, aby powiększyć, choć to zrobić:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Domyślam się, że setRegion
w pinchRecognized
go zrywa, ale nie wiem, jak inaczej zatrzymać animację.
Zgodnie z wnioskiem, kod przycisku, oba przyciski użyć tej metody, powiększanie korzysta 0,5, pomniejszyć wykorzystuje 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)
}
}
Edit: Próbowałem ustawienie setRegion
(ten, który zatrzymuje animację) w gestureRecognizer:shouldRecognizeSimultaneouslyWith:
, ale nie jest wywoływana podczas animowania mapy.
Edit: Po wypróbowaniu co @robinb zasugerował, zobaczyłem, że moje adnotacje zaktualizować szybciej niż mój samej mapie, co sugeruje, że region zostanie ustawiony, to po prostu czeka na coś wizualnie zaktualizować mapę.
Możesz opublikować przycisk kod metoda? – CodeChanger
@CodeChanger Zaktualizował pytanie – vrwim
jakiś szczególny powód do przesłonięcia setRegion: funkcja? –