延迟对委托方法的调用 - mapView:regionDidChangeAnimated:

时间:2010-04-17 21:27:30

标签: iphone objective-c mapkit mkmapview

每当用户滚动地图或放大/缩小时,此方法都会立即被调用。我想延迟对此方法的调用,比如2秒。有可能吗?

2 个答案:

答案 0 :(得分:4)

您可以像这样实现该方法:

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSNumber *animatedNumber = [NSNumber numberWithBool:animated];
    NSArray *args = [[NSArray alloc] initWithObjects:mapView,
                                                     animatedNumber,nil];

    [self performSelector:@selector(delayedMapViewRegionDidChangeAnimated:)
          withObject:args
          afterDelay:2.0f];

    [args release];
}

然后,在同一个班级的某个地方:

-(void)delayedMapViewRegionDidChangeAnimated:(NSArray *)args
{
  MKMapView *mapView = [args objectAtIndex:0];
  BOOL animated = [[args objectAtIndex:1] boolValue];

  // do what you would have done in mapView:regionDidChangeAnimated: here
}

当然,如果你不需要其中一个参数(mapViewanimated),你可以通过传递你需要的那个来使这个变得相当简单。

如果您不能只编辑MKMapViewDelegate的代码,也许您可​​以通过方法调配来做类似的事情,尽管那时你的真的 hacky。

答案 1 :(得分:0)

您可以使用performSelector:withObject:afterDelay:或其中一种相关方法发送延迟消息。