2012-04-03 12 views
5

Mam ten problem, gdy dodaję UIActivityIndicatorView do UIScrollView; Wszystko działa poprawnie, z tym wyjątkiem, że nie zaczyna się obracać, chyba że przewijane jest UIScrollView.UIActivityIndicatorView nie wiruje

Czy ktoś może mi pomóc w tym problemie?

Dziękuję.

Oto niektóre kodu:

UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [mainScrollView addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
+0

możesz dodać kod tutaj, aby uzyskać więcej informacji na temat pytania. –

+0

jeszcze jedna rzecz, aby rozpocząć działanie, musisz wywołać metodę po dodaniu aktywności w widoku lub przy dowolnym wydarzeniu, jak kliknięcie przycisku lub po prostu ustawić performselector z niewielkim opóźnieniem. –

+0

czy wykonujesz kolejne zadanie w wątku głównym? jeśli tak, główny wątek zostanie użyty do tego zadania i zatrzyma animację do czasu zakończenia tego zadania. –

Odpowiedz

6

Trzeba zadzwonić startAnimating na wskaźniku aktywności, aby go ożywić. Alternatywnie w konstruktorze interfejsów możesz zaznaczyć pole wyboru "animacja".

+0

Dlaczego ta odpowiedź nie została przyjęta? – Omeed

+0

Lepsze pytanie brzmi, co to jest wskaźnik aktywności bez animacji i dlaczego byłby to stan domyślny? – devios1

0

Spróbuj uruchomić animatora w innym wątku.

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(showProgress) object:nil]; 
[thread start]; 

//do whatever your want here 

//call this when you want it stop animating 
    [activityIndicator stopAnimating]; 
    [thread release]; 


- (void)showProgress{ 

    [activityIndicator startAnimating]; 

} 
+0

Nie sądzę, że jest to problem z wątkiem. Ale i tak dziękuję – astazed

2
activityIndicator = [[UIActivityIndicatorView alloc] 
initWithFrame:CGRectMake(87/2,y+56/2); 
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.tag=tag; 
[mainScrollView addSubview:loaderActivity]; 
[activityIndicator startAnimating]; 
[activityIndicator release]; 
3

Fakt, że nie jest animowanie aż przewijania w widoku przewijania jest objawem, że wezwanie do startAnimating dzieje się w wątku tła. Wywołania UIKit powinny być wykonywane w głównym wątku.

Można sprawdzić, że to się dzieje w wątku tła poprzez dodanie kodu tak:

if ([NSThread isMainThread]) { 
    NSLog(@"Running on main thread."); 
} else { 
    NSLog(@"Running on background thread."); 
} 

Będziemy chcieli, aby upewnić się, że cały kod pokazałeś w swoim pytaniu jest uruchomiony w głównym wątku. Aby to zrobić, możesz zmienić swój kod wyglądać mniej więcej tak:

// this code would be wherever your existing code was 
[self performSelectorOnMainThread:@selector(addActivityIndicatorToView:) withObject:mainScrollView waitUntilDone:YES]; 

// this would be a new method in the same class that your existing code is in 
- (void) addActivityIndicatorToView:(UIView*) view { 
    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [view addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
} 
0

mieliśmy problem gdzie sprawdził startAnimating w viewDidLoad i nie działa. Przeniosłem rozmowę na numer viewWillAppear i zadziałało!

Powiązane problemy