0

我在 iPhone 屏幕上有一个十字准线,当一个亭子(地图上的点)在它下面移动时,我想开始在地图上缩放。当一个亭子在十字准线下并且它不再在它之下时,我已经准备好让检测工作。

现在我用伪代码把它贴在这里:

- (void) checkForPavilionUnderCrosshair {

   if(new pavilion under crosshair) {
     // start zooming
   }
   else if(just left pavilion under crosshair){
     // stop zooming
   }
}

所以我现在需要做的是不断触发:

mapView setZoom:(mapView.zoom+0.1) animated:NO];

并且能够在十字准线移出展馆时阻止这一进展。

我在 stackoverflow 上进行了一些搜索,但我发现的帖子不包括例如停止它。我没有在程序中计时的经验,所以有人可以通过告诉我正在寻找什么来帮助我吗?

我试过 [self performSelector:@selector(zoomTest) withObject:self afterDelay:0.0];

如果我继续触摸地图并移动我的手指,那么它会保持 checkForPavilionUnderCrosshair 就像我想要的那样。但是在我停止触摸屏幕后,执行选择器会被触发,所以如果我触摸屏幕 20 秒,它会延迟 20 秒触发。

有什么解决方法吗?

4

1 回答 1

2

您可以[self performSelector:@selector(checkForPavilionUnderCrosshair) withObject:nil afterDelay:1.0]在方法结束时调用以在指定时间段后再次调用它。请注意,延迟以秒为单位。

NSTimer如果您想要更高级的东西,您可以查看Apple 文档,或查看此 SO question以获取示例和解释。

如果您决定使用简单performSelector方法,当您不想再重复时,您可以不调用该方法。如果您选择使用NSTimer,请调用invalidate计时器以停止它。

于 2013-05-11T12:25:09.897 回答