2015-01-21 4 views

ответ

-1

Самый простой способ - nil делегат MKMapView, так что после него не будет вызван метод делегата.

self.mapView.delegate = nil; 
0

Одна вещь, вы можете попробовать это создание CADisplayLink, которая привязана к частоте обновления экрана, а затем в обратном вызове, проверяя текущее состояние карты. Там вы можете позвонить другому setRegion:animated: в текущую позицию, чтобы остановить предыдущую анимацию.

2

Если вы создаете еще одну анимацию, но для другого региона, кроме существующего, это приведет к аннулированию существующего. Примечание. Если я попытаюсь создать новую анимацию, но для нее видимыйMapRect, iOS просто проигнорирует ее.

func stopZoom() { 
    //the trick: creating a region very similar to the existing one 
    var mapRegion:MKCoordinateRegion = MKCoordinateRegionForMapRect(self.mapView.visibleMapRect) 
    mapRegion.span.latitudeDelta = mapRegion.span.latitudeDelta + 0.000001 

    UIView.animateWithDuration(0.1, delay: 0.0, options: [], animations: { 
    let mapRegion:MKCoordinateRegion = mapRegion 
    self.mapView.setRegion(mapRegion, animated: true) //this will invalidate the other animations 
    }) { (completed: Bool) -> Void in 
} 

}

для справки метод startZoom:

func startZoom() { 
    UIView.animateWithDuration(10, delay: 0.0, options: [UIViewAnimationOptions.CurveLinear, UIViewAnimationOptions.AllowUserInteraction, UIViewAnimationOptions.BeginFromCurrentState], animations: { 
    let mapRegion:MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(self.coordinate, 500, 500) 
    self.mapView.setRegion(mapRegion, animated: true) 
    }) { (completed: Bool) -> Void in 
} 

}

провел довольно много времени, чтобы понять это, я надеюсь, что это будет полезно для вас.

Смежные вопросы