MKMapView setRegion如何停止动画

时间:2015-01-21 11:35:15

标签: ios animation mkmapview mapkit

你帮我吗?我需要停止MkMapView方法setRegion:region animated:true。我需要设置新的动画区域,并选择停止它。 感谢。

3 个答案:

答案 0 :(得分:2)

如果您创建另一个动画,但对于与现有动画不同的区域,则会使现有动画无效。注意:如果我尝试创建一个新动画,但对于相同的visibleMapRect,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
}

}

花了很多时间来解决这个问题,我希望它会对你有所帮助。

答案 1 :(得分:0)

您可能尝试的一件事是创建一个与屏幕刷新率相关联的CADisplayLink,然后在其回调中,检查地图的当前状态。在那里,您可以将另一个setRegion:animated:调用到当前位置,以便停止上一个动画。

答案 2 :(得分:-1)

最简单的方法是nil MKMapView的委托,以便之后不会调用任何委托方法。

self.mapView.delegate = nil;