2012-04-03 18 views
5

Tengo este problema donde estoy agregando un UIActivityIndicatorView a un UIScrollView; Todo funciona bien, excepto que no comienza a girar a menos que se desplace el UIScrollView.UIActivityIndicatorView no gira

¿Alguien me puede ayudar con este problema?

Gracias.

Aquí hay un código:

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

puede agregar el código aquí para obtener más información sobre la pregunta. –

+0

una cosa más para iniciar la actividad que se ejecuta, debe llamar al método después de que se haya agregado actividad en la vista o en cualquier evento, como hacer clic en el botón o simplemente establecer el selector de rendimiento con un pequeño retraso. –

+0

¿está realizando otra tarea en el hilo principal? si es así, el hilo principal se usará para esa tarea y detendrá la animación hasta que la tarea finalice. –

Respuesta

6

Es necesario llamar startAnimating en el indicador de actividad para que se animan. Alternativamente, en el constructor de interfaz puede marcar la casilla "animar".

+0

¿Por qué no se aceptó esta respuesta? – Omeed

+0

Una mejor pregunta es, ¿qué uso tiene un indicador de actividad que no anima y por qué sería ese el estado predeterminado? – devios1

0

Intenta ejecutar el animador en un hilo diferente.

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

No creo que sea un problema de subprocesos. Pero gracias de todas maneras – 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

El hecho de que no se anima hasta que se desplaza en la vista de desplazamiento es un síntoma de que su llamada a startAnimating está sucediendo en un subproceso en segundo plano. Las llamadas a UIKit deben hacerse en el hilo principal.

Puede comprobar que está sucediendo en un subproceso en segundo plano mediante la adición de código como este:

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

usted querrá asegurarse de que todo el código que mostró en su pregunta se ejecuta en el hilo principal. Para ello, se puede cambiar el código para ser algo como esto:

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

tenido un problema donde hice la llamada startAnimating en el viewDidLoad y no funcionó. Moví la llamada en el viewWillAppear ¡y funcionó!

Cuestiones relacionadas