He visto mucho en esto, pero parece que solo puedo obtener webView y tablas relacionadas con este problema. El mío es totalmente diferente, parece que con la misma excepción de bloqueo:CALayerInvalidGeometry ', razón:' CALayer bounds contiene NaN: [0 0; nan nan] crash in view
CALayerInvalidGeometry ', razón:' CALayer bounds contiene NaN: [0 0; nan nan]
Básicamente lo que tengo aquí es una vista que se desvanece y escalas de imágenes. Recientemente decidí cambiar mi código usando CGAffineTransformScale en una animación UIView en lugar de escalar las cosas cada vez que un temporizador marca. Esto usa mucho menos poder de procesamiento.
Pero no importa en qué orden tengo las imágenes, siempre se cuelga después de la 19ª. No parece ser un problema con la matriz de coordenadas de posicionamiento a la que se refiere, porque tiene solo 6 pulgadas de longitud y se curva después de que alcanza su longitud. Entonces, por algún motivo, desde que implementé este código de animación, me da esa falla. Alguien sabe por qué?
Aquí es la parte que he cambiado desde que comenzó a chocar:
-(void) onTimer{
if(scaleTimer_A==5){
imageView_A.image = [UIImage imageNamed:[attractList_A objectAtIndex:imageIndex_A]];
imageView_A.frame = CGRectMake(300, 200, 3.86, 3.86);
imageView_A.center = CGPointMake(attractLocs_x_A[attractLocs_A_index], attractLocs_y_A[attractLocs_A_index]);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
imageView_A.alpha = 1;
imageView_A.transform = CGAffineTransformScale(imageView_A.transform, 100, 100);
[UIView commitAnimations];
}
if(scaleTimer_A==10){
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
imageView_A.alpha = 0;
imageView_A.transform = CGAffineTransformScale(imageView_A.transform, 1.2, 1.2);
[UIView commitAnimations];
scaleTimer_A=0;
imageIndex_A+=1;
if(imageIndex_A==imageIndex_A_size){
imageIndex_A=0;
}
attractLocs_A_index+=1;
if(attractLocs_A_index==attractLocs_A_SIZE){
NSLog(@"Back to zero A");
attractLocs_A_index=0;
}
NSLog(@"Image A =%@", [attractList_A objectAtIndex:imageIndex_A]);
}
scaleTimer_A+=1;}
EDITAR:
Así es como me dieron el código anterior para trabajar sin el problema de estrellarse usando CGAffineTransformIdentity.
-(void) onTimer{
if(scaleTimer_A==5){
imageView_A.image = [UIImage imageNamed:[attractList_A objectAtIndex:imageIndex_A]];
imageView_A.transform = CGAffineTransformIdentity;
imageView_A.center = CGPointMake(attractLocs_x_A[attractLocs_A_index], attractLocs_y_A[attractLocs_A_index]);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
imageView_A.alpha = 1;
imageView_A.transform = CGAffineTransformScale(CGAffineTransformIdentity, 100, 100);
[UIView commitAnimations];
}
if(scaleTimer_A==10){
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
imageView_A.alpha = 0;
imageView_A.transform = CGAffineTransformScale(CGAffineTransformIdentity, 120, 120);
[UIView commitAnimations];
scaleTimer_A=0;
imageIndex_A+=1;
if(imageIndex_A==imageIndex_A_size){
imageIndex_A=0;
}
attractLocs_A_index+=1;
if(attractLocs_A_index==attractLocs_A_SIZE){
NSLog(@"Back to zero A");
attractLocs_A_index=0;
}
NSLog(@"Image A =%@", [attractList_A objectAtIndex:imageIndex_A]);
}
scaleTimer_A+=1;}
NaN ocurre normalmente cuando se divide por cero. Revisa y revisa todas tus matemáticas. –
También he oído esto, pero ¿en qué parte de este código estoy dividiendo entre 0? – VagueExplanation
¿Puedes publicar el rastro de la pila? – Max