2016-08-04 2 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() 
      }) 
     }) 
    } 

showNextImage 모든 delay초를 호출 할 예정. 그러나 이미지를 표시하지 않고 무한 루프에 갇혀 있습니다. 나는이 문제를 해결하는 방법을 모른다. 어떤 도움을 주셔서 감사합니다.

답변

2

루프는 isRunning이 yes이고 루프가 대기 중이 지 않으므로 일부 카운트 (i < 10)를 넣거나 특정 조건에 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]; 

위는 ViewWillDisapper에 당신은 또한 당신이 이미 실행 확인해야 타이머 예약하기 전에, 그것을 무효화해야 할 5 초 지연과 timerCode입니다.

+0

이 경우 NSTimer를 무한 루프로 사용하는 방법을 적어주십시오. –

+0

@AndreyM. 무슨 논리를 self.showNextImage 이미지를 표시하려면, 당신이 그들에게 보여줄 때까지 어떤 조건이 있습니까 –

+0

@AndreyM. 내 업데이트 된 답변을 확인하십시오. –

-1

주 스레드에서 이미 실행중인 코드 dispatch_after를 살펴보십시오. 그리고 다시 메인 스레드 내부를 사용합니다. 나는 필요 없다는 것을 의미한다. 필요가있을 때 외부에서 주 스레드 이외의 다른 장치를 사용하고 uielements를 사용하는 경우 주 스레드를 내부에서 사용합니다.