iphone - UI update in selector -
i perform selector in application:
- (void) dofilter:(uibutton*)button { [activityindicator startanimating]; [self disablebuttons]; // ... // actions // ... sleep(2); [self enablebuttons]; [activityindicator stopanimating]; }
when user clicks on button. activityindicator uiativityindicatorview. don't see activity indicators while code performing. how can fix it?
firstly, should never ever use sleep
on main thread. blocks entire app , user can't time.
secondly, ui not updated until code returns control run loop. whenever call startanimating
, stopanimating
in same method without returning run loop in between, can sure nothing happen in ui (same disablebuttons
, enablebuttons
).
solution: call startanimating
, disablebuttons
. start tasks have perform in background ui not blocked. can use nsoperation
, performselectorinbackground:...
, grand central dispatch etc. that. finally, when long task finished, have call method on main thread calls stopanimating
, enablebuttons
.
Comments
Post a Comment