UIActivityIndicatorView에서 startAnimating을 호출하면 시작되지 않습니다. 왜 이런거야?iPhone UIActivityIndicatorView가 시작 또는 중지되지 않습니다.
[블로그 스타일의 자체 답변 질문입니다. 아래의 솔루션은 아마도 더 나은 사람이있다, 나를 위해 작동하지만]
UIActivityIndicatorView에서 startAnimating을 호출하면 시작되지 않습니다. 왜 이런거야?iPhone UIActivityIndicatorView가 시작 또는 중지되지 않습니다.
[블로그 스타일의 자체 답변 질문입니다. 아래의 솔루션은 아마도 더 나은 사람이있다, 나를 위해 작동하지만]
이 같은 코드를 작성하는 경우 : 당신이 실제로 시작하고 중지하는 UI 시간을 제공하지 않는
- (void) doStuff
{
[activityIndicator startAnimating];
...lots of computation...
[activityIndicator stopAnimating];
}
을 모든 계산이 주 스레드에 있기 때문에 활동 표시기가 표시됩니다. 당신은 별도의 스레드에서 계산을 넣어, 그것은 stopAnimation를 호출하기 전에 끝날 때까지 기다릴 수,
- (void) threadStartAnimating:(id)data {
[activityIndicator startAnimating];
}
- (void)doStuff
{
[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];
...lots of computation...
[activityIndicator stopAnimating];
}
또는 : 하나 개의 솔루션은 별도의 스레드에서 startAnimating를 호출하는 것입니다.
내가 일반적으로 할 : 나는 내 코드는 맹인 인 겪었처럼
이[activityIndicator startAnimating];
[self performSelector:@selector(lotsOfComputation) withObject:nil afterDelay:0.01];
...
- (void)lotsOfComputation {
...
[activityIndicator stopAnimating];
}
이 방법은 나를 위해 잘 작동했습니다. – Arash
내가 사용하는 차이점을 가지고 똑같이하고있다. (void) performBlock : (void (^) (void)) 블록 afterDelay : (NSTimeInterval) delay; http://forrst.com/posts/Delayed_Blocks_in_Objective_C-0Fn에서 0.0을 지정하면 진행 표시기가 표시되지 않고 0.01은 100Hz 모니터가 깜박일 때까지의 시간입니다. – 18446744073709551615
솔루션을 주셔서 감사합니다 ... –
좋아, 미안 보인다.
나는이 같은 표시를 종료했습니다
이[activityIndicator removeFromSuperview];
activityIndicator = nil;
그래서 하나 개를 실행 한 후 activityIndicator이 완전히 제거되었습니다.
이 질문은 매우 유용합니다. 그러나 대답 게시판에서 누락 된 한 가지는 UIActivityIndicatorView가 아닌 별도의 스레드에서 오랜 시간이 걸리는 모든 작업을 수행해야한다는 것입니다. 이렇게하면 UI 인터페이스에 응답하지 않습니다.
- (void) doLotsOFWork:(id)data {
// do the work here.
}
-(void)doStuff{
[activityIndicator startAnimating];
[NSThread detachNewThreadSelector:@selector(doLotsOFWork:) toTarget:self withObject:nil];
[activityIndicator stopAnimating];
}
나는 이걸로 갈 것입니다. 그게 최선의 설명입니다. 하나의 문제는 내가 분리 한 메서드에서 표시기에 애니메이션을 적용하지 않도록 호출을 이동한다는 것입니다. 메소드가 완료되면 애니메이션을 중지합니다. –
모든 UI 요소는
[self performSelectorOnMainThread:@selector(startIndicator) withObject:nil waitUntilDone:NO];
다음 주 스레드에서 할 필요 : 필요한 경우
-(void)startIndicator{
[activityIndicator startAnimating];
}
, 빠른 3 버전 :
func doSomething() {
activityIndicator.startAnimating()
DispatchQueue.global(qos: .background).async {
//do some processing intensive stuff
DispatchQueue.main.async {
self.activityIndicator.stopAnimating()
}
}
}
당신은 수 있도록 할 수 있습니다를 그것은 당신이 블로그 스타일 자체 답변 질문을 게시하는 것이 분명합니다. – TechZen