2014-02-14 2 views
1

500-1500ms 정도의보기 전환시 짧은 지연이있는 응용 프로그램이 있습니다. 보기의 변경은 미묘하기 때문에 사용자에게 뭔가 잘못되었다는 피드백을 제공해야합니다.계속하기 전에 UI 메시지 루프를 iOS에서 플러시하는 방법

"장착 중"오버레이를 사용하고 싶습니다. 불행히도 CPU를 차지하는 작업은 UI를 만드는 것과 관련되어 있으므로 백그라운드 스레드로 이동할 수 없습니다.

작업이 주 스레드를 차지하고 있기 때문에 다른 작업이 시작되기 전에로드 오버레이를 추가하면 스레드가 다음 작업에서 작업 중이므로 주변 작업이 완료 될 때까지 UI가 업데이트되지 않으므로 결코 표시되지 않습니다. 그것.

일부 운영 체제에는 이와 같은 드문 상황에서 사용할 수있는 DoEvents 또는 FlushMessagePump 메서드가 있습니다. iOS에는 그러한 것이 있습니까? SetNeedsDisplay()는 메시지 펌프의 업데이트 만 대기하므로 원하는 버전이 아닙니다.

다른 제안도 환영합니다.

답변

0

로드 오버레이를 표시 한 다음 - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay을 지연 0으로 사용하여 실제로드합니다. 이렇게하면 화면이 새로 고침 될 때까지 로딩이 지연됩니다. 이는 선택기를 주 스레드의 실행 루프에 대기시키기 때문입니다.

+0

당신은 그것을 못을 박았다. 고맙습니다. – TwoRedCells

+0

@TwoRedCells 기꺼이 도움이 될 수 있습니다. – Gavin

+0

FWIW 이것은 0이 아닌 값으로 만 작동합니다 (나를 위해). 예 : 0.1 – TwoRedCells

1

하는 대신로드를 지연의, 당신은 실행하는 실행 루프를 강제 할 수

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate date]]; 
+0

그 사실을 모름! 그러나 나는 그것이 좋다 ;) – HAS

관련 문제