2012-01-31 5 views
0

내 응용 프로그램에서 MBProgressHUD와 관련된 작은 문제가 있습니다. 기본적으로MBProgressHUD가 완료되기 전에 사라집니다.

내가 그것을 찾을 간단한 방법으로 그것을 할 수 있습니다 사용하고 있습니다 :

[MBProgressHUD hideHUDForView:self.view animated:YES]; 

MBProgress 쇼 :

[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
[self performSelector:@selector(save) withObject:nil afterDelay:0.001]; 
[self refreshView]; 

메소드 refreshView 그것의 끝이 라인을 가지고하는 것은 실행이다 정확히 어떻게해야 할 지 모르지만, 마지막 절반은 (지속 시간) 거의 보이지 않는 상태로 사라져 마치 마치 실제로 끝나기 전에 실행이 끝난 것처럼 보입니다.

여기에 무엇이 잘못 될지에 대한 아이디어가 있습니까?

고맙습니다.

답변

2

이해해야 할 개념은 실행 루프의 개념입니다. 실행 루프는 들어오는 이벤트, 타이머, 네트워킹 등을 처리하는 프로그램의 내부 루프입니다 (시스템에서 제공하고 실행하므로 실제로이 루프가 코드에 표시되지 않습니다).

줄 :

[self performSelector:@selector(save) withObject:nil afterDelay:0.001]; 

당신은 1 초 후에 실행하도록 -save 작업을 예약합니다. 일정

(주 스레드가 뭔가 다른 일을 사용중인 경우 이상)이 -save 당신은 HUD를 숨 깁니다 당신의 refreshView 전화 (그래서 을 실행하지 않음).

그래서 실제로 발생하는 것은 HUD를 한 번에 표시하고 숨기는 것입니다. 그래서 당신은 그것을 보이고 숨기는 결합 된 애니메이션과 같은 것을 볼 수 있습니다. 독립적으로 -save 메서드가 호출됩니다.

UIAdam이 제안한 것과는 달리, 실행 루프가 숨을 쉬고 화면에 눈동자를 표시해야하기 때문에 performSelector:afterDelay:이 필요합니다. 사용자 인터페이스의 변경은 프로그램이 실행 루프로 돌아올 때에 만 즉시 발생합니다.

[self refreshView]; 

하고 -save 방법의 끝으로 이동 :

수정 프로그램이 줄을하는 것이다.

+0

실행 루프에 대한 간단한 설명에 감사드립니다. 그것은 내가 통과 한 커플의 날에 대한 이해를 얻기 위해 고심했던 것입니다. 당신은 정확합니다. 내 저장 방법의 끝으로 새로 고침 방법을 옮겨서 문제가 해결되었습니다! 감사합니다. –

2

코드를 더 이상 보지 않아도 정확한 해결책을 제시하기는 어렵습니다. 그러나 기본적으로이 문제는 아마도 save 메서드가 호출되기 전에 [self refreshView] 및 따라서 [MBProgressHUD hideHUDForView:self.view animated:YES]을 호출한다는 사실과 관련이 있습니다. save 메서드가 끝날 때 HUD를 숨기거나 지연 후 save을 직접 호출하는 것이 좋습니다. 내가 왜 지연 후 저장을해야하는지 잘 모르겠습니다.

+0

나는 완전히 이해하지 못한다. 그러나이 질문은 여기에있다 : http://stackoverflow.com/questions/5685331/run-mbprogresshud-in-another-thread 나는이 코드 구성을 이끌어 냈다. [셀프 저장]을 할 경우; performSelector 코드 대신 화면이 잠시 멈추고 progressHUD가 깜박입니다. –

+1

@UIAdam : 지연 후 저장을 수행해야합니다. 설명을 보려면 제 대답을 참조하십시오. – mvds

+0

물론, 완벽한 의미가 있습니다. 저장을 시도하기 전에 HUD에 애니메이션을 적용 할 기회가 필요하다는 것을 잊었습니다. – UIAdam

관련 문제