2011-10-31 1 views
0

나는 수행하는데 꽤 시간이 걸리는 계산 과정을 가지고있어서 UIActivityIndicatorView이 적절해 보입니다. 계산을 시작하는 버튼이 있습니다.긴 계산 과정을위한 UIActivityIndicatorView

난 계산 시작 부분에 명령을 넣으려고 시도했지만 계산이 끝나면 과 [calcActivity stopAnimating];은 표시되지 않습니다.

다음으로, IBAction 계산에 대한 호출로 시작 및 중지를 포함하는 새 항목을 만들고 startAnimating에 약간의 시작 기회를주기 위해 더미 루프를 작성했습니다. 이것도 작동하지 않습니다.

골격 코드는 다음과 같습니다

- (IBAction)computeNow:(id)sender { 
    [calcActivity startAnimating]; 
    for (int i=0; i<1000; ++i) { } 
    [self calcStats]; 
    [calcActivity stopAnimating]; 
    } 

- (IBAction)calcStats { 
    // do lots of calculations here 
    return; 
    } 
+0

주 스레드에서 긴 계산을해서는 안됩니다. – Phlibbo

답변

1

좋아, 내가 주석으로, 당신은 당신의 메인 쓰레드에서 복잡한 계산을 performe해서는 안됩니다. 귀하의 상황과 같은 상황으로 이어질뿐만 아니라 귀하의 앱 또한 매장에서 거부 될 수 있습니다.

이제 UIActivityIndicatorView가 업데이트되지 않는 이유는 UI가 실제로 자체를 업데이트하지 않는다는 것입니다. [calcActivity startAnimating];로 전화하면 코드가 실행 된 후 업데이트됩니다. 귀하의 경우에는 즉, startAnimatingstopAnimating이 동시에 호출되므로 아무 일도 일어나지 않습니다.

그래서 '쉬운 해결책 : this techniques 또는 아마도 더 나은 GCD을 사용하여 새 스레드를 시작하십시오.

1

넛지에게 감사드립니다. Phlibbo. 나는이 게임을 처음 사용하고 모든 도움을 주셔서 감사합니다. 내가 제공 한 링크의 모든 정보를 이해하지 못했지만 예제를 더 찾도록 자극했습니다. 나는 잘 작동하는 것을 발견했다. IBAction 'computeNow'는 계산 버튼에 의해 트리거됩니다. 이제 코드는 다음과 같습니다.

- (IBAction)computeNow { 
    [calcActivity startAnimating]; 
    [self performSelector:@selector(calcStats) withObject:nil afterDelay:0]; 
    return; 
} 

- (void) calcStats { 
    // Lots of tedious calculations 
    [calcActivity stopAnimating]; 
} 
+0

답변에서 '의견'대신 게시물을 수정해야합니다. 또한, 도움이 되었다면, 내 대답을 받아주십시오 :) – Phlibbo

관련 문제