首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在延迟一段时间后重复调用方法,直到达到结束条件

在延迟一段时间后重复调用方法,直到达到结束条件
EN

Stack Overflow用户
提问于 2013-05-11 20:22:37
回答 1查看 1.1K关注 0票数 0

我在iphone屏幕上有一个十字准线,当一个展馆(地图上的点)在它下面移动时,我想要开始在地图上缩放。我已经准备好了,当一个展馆在十字准线下的时候,当它不再在它下面的时候,我已经准备好了。

现在,我在这里用psuedo代码发布它:

代码语言:javascript
复制
- (void) checkForPavilionUnderCrosshair {

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

所以我现在要做的就是继续触发:

代码语言:javascript
复制
mapView setZoom:(mapView.zoom+0.1) animated:NO];

并且能够在十字准线离开展馆时停止这一进程。

我在stackoverflow上做了一些搜索,但我发现的帖子中并不包括阻止它。我没有在程序中计时的经验,所以有人能告诉我我在找什么吗?

我尝试了self performSelector:@selector(zoomTest) withObject:self afterDelay:0.0;

如果我一直触摸地图并移动我的手指,它就会保持我想要的checkForPavilionUnderCrosshair。但是执行选择器get在我停止触摸屏幕后触发,所以如果我触摸屏幕20秒,它就会触发20秒。

有什么解决方法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-05-11 20:25:10

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

如果您想要更高级的东西,可以在the Apple docs上查看NSTimer,或者查看this SO question中的示例和解释。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16497033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档