2016-08-04 61 views
0

我要循環dispatch_after用於循環顯示的圖像是這樣的:如何循環despatch_after

while isRunning { 
     let delay = Int64(Double(NSEC_PER_SEC) * settings.delay) 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), { 
      dispatch_async(dispatch_get_main_queue(), { 
       self.showNextImage() 
      }) 
     }) 
    } 

它應該調用showNextImagedelay秒。但它無限循環地顯示圖像而不顯示圖像。我不知道如何解決這個問題。任何幫助表示讚賞。

回答

2

因爲isRunning是yes並且循環沒有等待,所以最好放置一些計數(或者使用NSTimer到某些條件,然後使其無效),則循環調度無限dispatch_after。

if (self.stimerShowNextImage.isValid) { 

     [self.stimerShowNextImage invalidate]; 
     self.stimerShowNextImage = nil; 

    } 
    self.stimerShowNextImage = [NSTimer scheduledTimerWithTimeInterval: 5 
                   target: self 
                   selector: @selector(showNextImage) 
                   userInfo: nil 
                   repeats: YES]; 

以上是用5秒鐘的延遲timerCode,在ViewWillDisapper你也需要調度定時器,你必須檢查它尚未運行之前使其失效。

+0

請寫下如何在這種情況下使用NSTimer進行無限循環? –

+0

@AndreyM。什麼是顯示圖像self.showNextImage的邏輯,是否有任何條件,直到你想要顯示它們 –

+0

@AndreyM。檢查我更新的答案。 –

-1

看着你的代碼dispatch_after已經在主線程中運行。並再次在主線程內使用。我的意思是不需要。 當需要的時候意味着如果你在使用ulelements之後和之後使用了除主線程以外的其他主線程,那麼就使用主線程。