问题
I have a method that does a time consuming operation, say something like ten consecutive calls to [[NSString alloc] initWithContentsOfURL:u];
I want a UIActivityIndicatorView that was in a hidden state before the method call to show and animate, so I write:
activityIndicator.hidden = NO;
[activityIndicator startAnimating];
at the beginning of the method
but of course it won't work. The UIActivityIndicatorView will only animate once the method is over.
This is not acceptable. I must show the animation during the function call.
Anyone knows how to do it?
NSOperation maybe? (anyone has a sample thereof?)
回答1:
I assume you are doing some expensive work in this method and while that work is being performed, you want the activity indicator to spin. Expensive work should NOT be done on the main thread (iOS might kill your app!). Put your expensive work on a separate thread with:
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
...and when the method (aSelector) is done, call:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
...and there you stop the activity indicator.
Never call any UI code from within a non-main thread!
来源:https://stackoverflow.com/questions/3317068/how-do-i-show-and-start-animating-a-uiactivityindicatorview-from-within-a-method