2012-04-03 12 views
5

Ho questo problema dove sto aggiungendo uno UIActivityIndicatorView a UIScrollView; Tutto funziona correttamente, tranne che non inizia a girare a meno che lo UIScrollView non sia in movimento.UIActivityIndicatorView non in rotazione

Qualcuno può aiutarmi con questo problema?

Grazie.

Ecco il codice:

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

puoi aggiungere il codice qui per ulteriori informazioni sulla domanda. –

+0

un'altra cosa per iniziare l'attività in esecuzione è necessario chiamare il metodo dopo l'attività aggiunta in vista o su qualsiasi evento come il clic del pulsante o semplicemente impostare performselector con un lieve ritardo. –

+0

stai eseguendo un'altra attività nel thread principale? in tal caso, il thread principale verrà utilizzato per quell'attività e interromperà l'animazione fino al completamento di tale attività. –

risposta

6

È necessario chiamare startAnimating sul indicatore di attività di averlo animare. In alternativa nel generatore di interfacce puoi spuntare la casella di controllo "animando".

+0

Perché questa risposta non è stata accettata? – Omeed

+0

Una domanda migliore è a che cosa serve un indicatore di attività non animata e perché dovrebbe essere lo stato predefinito? – devios1

0

Provare a eseguire l'animatore in una discussione diversa.

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

Non penso che sia un problema di thread. Ma grazie comunque – 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

Il fatto che non è l'animazione fino a quando si scorre in vista di scorrimento è un sintomo che la chiamata a startAnimating sta accadendo in un thread in background. Le chiamate UIKit dovrebbero essere fatte nel thread principale.

È possibile verificare che sta accadendo in un thread in background con l'aggiunta di codice come questo:

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

ti consigliamo di assicurarsi che tutto il codice che avete mostrato nella tua domanda è in esecuzione sul thread principale. Per fare questo, è possibile modificare il codice per essere simile a questo:

// 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

avuto un problema in cui ho fatto la chiamata startAnimating nel viewDidLoad e non ha funzionato. Ho spostato la chiamata nel viewWillAppear e ha funzionato!

Problemi correlati