2011-04-22 3 views
0

무거운 UI 업데이트 중에 활동 표시기를 표시하려고했습니다.(iphone) UI 업데이트가 많은 경우 활동 표시를 어떻게 표시합니까?

내 최초의 시도가 실패한 뷰 1에서

  1. 공연 활동 표시했다
  2. 과 pushViewController는
  3. 은 뷰 1의 viewDidDisappear가 (과 pushViewController의 푸시 애니메이션 가 발생합니다 (이의 ViewController의 생성보기는 시간이 오래 걸립니다)), 활동 표시기를 숨기기

pushViewController 전에 "show activity indicator"를 호출했는데 푸시 된 viewController의 뷰를 생성 할 때 발생하는 무거운 UI로 인해 활동 표시기가 표시되지 않는 문제가있었습니다.

필자는 전략을 다음과 같이 변경했으며 작동하며 이유는 알 수 없습니다. 의 ViewController의 viewDidLoad에

  • viewDidAppear에 무거운 UI 로딩을 숨길 표시
  • 에서

    1. 과 pushViewController
    2. 공연 활동 표시 나는 인상 표시등이 didn를 이유 있었다 첫 번째 방법은 무거운 UI 프로세스 때문이었습니다.
      링크의 토론을 참조하십시오. (iphone) showing activity indicator before heavy ui updating

      지연된 UI 업데이트 (표시기가 표시되지 않음)가 큐에 너무 많은 UI 업데이트로 인해 발생하는 경우 두 번째 방법이 다른 이유는 무엇입니까?

      viewDidLoad는보기를 만들 때만 호출된다는 것을 알고 있습니다.
      그리고보기가 실제로 화면에 표시 할 때 viewDidAppear는 (따라서 호출 할 수있는 여러 번)

      . 호출되는하지만 viewDidAppear를 사용하는 두번째 방법은 내 상황에서 작동하는 이유를 설명 할 근본적인 차이가?

      소위 메인 스레드와 별도로 UI 업데이트 스레드가 있습니까? 메인 스레드가 UI 업데이트 스레드입니까?

      난 당신이 주 스레드에서 UIKit UI를 업데이트하고 있는지 확인하려면

    답변

    0

    먼저 감사드립니다. 이것은 반드시 필요합니다. 메인 스레드를 사용하지 않는다면 UIKit으로 작업 할 때 스레드를 지정할 필요가 없습니다.하지만 중복 될 수는 있습니다.

    viewWillAppear에서 활동 표시기를 시작합니다. 그런 다음 viewDidLoad에 다른 모든 것을로드하십시오.

    +0

    주셔서 감사합니다. 예 메인 스레드에서 UI를 업데이트하고 있습니다. viewWillAppear은 하나의 뷰 모양을 위해 여러 번 호출되는 것으로 생각했습니다. ViewDidAppear은 한 번 호출됩니다. 왜 viewWillAppearear가 더 나은 선택입니까? viewWillAppear은 여러 번 호출되기 때문에 여러 표시기 뷰를로드하지 않도록 bool var를 유지해야합니까? – eugene

    +0

    if 문을 사용하여 활동 표시기가 애니메이션으로 표시되는지 확인합니다. 그렇지 않다면 움직입니다. 활동 지시기가 이미 작성되어 있어야하며, 펜촉에 있으면 도움이됩니다. viewWillAppear (또는 앱에 더 적합한 경우 viewDidAppear)을 호출 할 때 표시 및 애니메이션으로 설정하고 UI가 완전히로드되면 애니메이션 표시를 중지하고 보이지 않게하는 활동 표시기를 설정합니다. –

    관련 문제