2012-04-30 5 views
1

활동 앱의 처리에서 진행을 반영하기 위해 실시간으로 진행 막대 또는 다른 진행 표시기를 업데이트,이 영리한 코드를 사용하지 않고이 작업을 수행 할 수있는 방법을 볼 수 없습니다 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];실시간 진행 표시 줄 업데이트

그렇지 않으면, 진행률 표시 줄이 다음 진행 표시 줄의 결론으로 ​​이동하는 경우에 실행 루프 완료 때까지 기다립니다.

단일 실행 루프 (또는 내가이 단일의 런 루프를로 인식) 동안 진행 상황을 업데이트 할 경우이 그렇게 할 수있는 유일한 방법입니다?

어떻게 는 일반적으로 실시간으로 업데이트하는 코드 진행 바입니까?

위의 코드 위험인가? 실행 루프를 직접 조작하는 것에 대해서는별로 몰라요. 이해가 안되는 앱에서 뭔가를하는 것이 불안하게 만듭니다. 이 코드는 작동하지만 좋은 생각입니까?

답변

3

는 백그라운드 스레드/NSOperationQueue/GCD에 긴 작업을 실행하고 정기적으로 UI를 업데이트합니다. UI가 항상 주 스레드에서 실행되므로 업데이트가 빠르게 적용됩니다. 다음과 같이 시도하십시오 :

일반적으로 전체 UI를 차단할 수 있으므로 길거나 복잡한 조작을 기본 스레드에서 실행하지 않으려합니다.

+0

제 경우에는 백그라운드 스레드에서 실행 중이지만 진행 정보를 보내는 방법을 알아 내려고하고 있습니다. – johnbakers

+0

GCD를 사용하는 방법을 보여주는 코드 샘플을 추가했습니다. –

1

나는 이런 종류의 필요성에 NSTimer을 사용하고 있습니다. 오디오 파일을 재생/스트리밍하고 진행률 표시 줄의 위치를 ​​표시하여 이것이 내 방식이되도록해야한다고 가정 해 보겠습니다.

도움이 되길 바랍니다.

+0

당신이 이것을하는 방법에 대해 조금 더 보여줄 수 있습니까? 타이머가 반복적으로 호출하는 메소드에는 무엇이 있습니까? 필요한 정보를 얻는 방법은 무엇입니까? – johnbakers

+0

이것은 내가 생성 한 타이머입니다 : 'myTimer = [NSTimer scheduledTimerWithTimeInterval : 1.0 대상 : 셀렉터 : @selector (checkSearchResult :) userInfo : nil repeats : YES]; [myTimer fire]; ' 다음에 '- (void) checkSearchResult : (NSTimer *) theTimer'가 호출되어 진행률 막대와 함께 재생할 곳을 지정하고 스트리밍없이 오디오를 재생하는 경우 avplayeritem에서 재생 시간을 가져올 수 있습니다/AVPlayer를,이하여 설정할 수 있습니다 또는 다음 스트리밍하는 경우에 당신은 ... 당신이있는 두 번째 알이 도움이 희망을 자신의 변수를 증가시킬 것이다 .. – iremk