2013-05-11 18 views
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秒遲到。

任何解決方法?

+0

你有沒有發現'NSTimer'及其方法'invalidate'? – Wain 2013-05-11 12:24:35

+0

什麼時候調用checkForPavilionUnderCrosshair?它被稱爲運行循環的每個循環,而手指在屏幕上,或在觸摸開始時只有一次? – Greg 2013-05-11 23:45:44

+0

每做一次平底鍋運動。 – clankill3r 2013-05-12 09:39:52

回答

2

你可以在你的方法結束時調用[self performSelector:@selector(checkForPavilionUnderCrosshair) withObject:nil afterDelay:1.0]在指定的時間段後再次調用它。請注意,延遲以秒爲單位。

如果你想要的東西更先進的,你可以看看NSTimer了在the Apple docs,或看到this SO question爲例和解釋。

如果您決定使用簡單的performSelector方法,那麼當您不想再重複時,您可以不調用該方法。如果您選擇使用NSTimer,請在計時器上撥打invalidate將其停止。

+0

我嘗試performSelector後更新了我的第一篇文章。 – clankill3r 2013-05-11 12:44:48