¿Hay alguna manera de permitir que una vista gire para siempre, con una velocidad especificada? Lo necesito para un tipo de indicador. Sé que existe esta extraña constante Lxxxxx00ff (no lo recuerdo exactamente) que significa "para siempre".¿Cómo dejar girar una vista para siempre?
5
A
Respuesta
20
Puede usar HUGE_VAL
para el valor flotante (si mal no recuerdo, la propiedad repeatCount para la animación es un flotador).
Para animación de la configuración, puede crear el objeto CAAnimation usando +animationWithKeyPath:
método:
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 3.0f;
animation.repeatCount = HUGE_VAL;
[rotView.layer addAnimation:animation forKey:@"MyAnimation"];
si no recuerdo crear correctamente este tipo de rotación usando sólo animaciones UIView es imposible debido a las rotaciones de 360 grados (2 * M_PI radianes) son optimizado para ninguna rotación en absoluto.
0
mi apuesta es:
-(void)animationDidStopSelector:... {
[UIView beginAnimations:nil context:NULL];
// you can change next 2 settings to setAnimationRepeatCount and set it to CGFLOAT_MAX
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStopSelector:...)];
[UIView setAnimationDuration:...
[view setTransform: CGAffineTransformRotate(CGAffineTransformIdentity, 6.28318531)];
[UIView commitAnimations];
}
//start rotation
[self animationDidStopSelector:...];
bien mejor apuesta:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationRepeatCount: CGFLOAT_MAX];
[UIView setAnimationDuration:2.0f];
[view setTransform: CGAffineTransformMakeRotation(6.28318531)];
[UIView commitAnimations];
2
mi solución para esto es un poco hacky, ya que no utiliza la animación núcleo, pero al menos funciona realmente para siempre y no requiere que configure varios pasos de animación.
...
// runs at 25 fps
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0/25
target:self
selector:@selector(rotate)
userInfo:nil
repeats:YES];
[timer fire];
...
- (void)rotate {
static int rotation = 0;
// assuming one whole rotation per second
rotation += 360.0/25.0;
if (rotation > 360.0) {
rotation -= 360.0;
}
animatedView.transform = CGAffineTransformMakeRotation(rotation * M_PI/180.0);
}
Cuestiones relacionadas
- 1. Girar una vista de video de Android
- 2. ¿Cómo puedo repetir una transición para siempre?
- 3. iPhone/iPad Pan, pellizcar y girar una vista simultáneamente
- 4. Borde blanco molesto al girar una vista en iPad
- 5. Girar vista de anuncio con API 8
- 6. Girar texto para imprimir
- 7. IOS: girar una UIImageView
- 8. Girar una UITableViewCell personalizada
- 9. ¿Cómo guardar una cookie en una vista web de Android para siempre?
- 10. girar una AVAsset con AVAssetExportSession
- 11. ¿Girar una cadena en C++?
- 12. ¿Cómo evito que desaparezca una vista modal al girar en el iPad?
- 13. vista Girar en el archivo xib al modo horizontal
- 14. Girar una imagen en java
- 15. Girar una imagen usando css
- 16. Cómo dejar Pool.map tomar una función lambda
- 17. Algoritmo para girar una matriz en tiempo lineal
- 18. Mantener un encabezado siempre a la vista
- 19. cámara Android girar
- 20. C# vista como recurso incrustado siempre muestra una vista anterior después de construir
- 21. Esperando localhost, ¡para siempre!
- 22. Girar una página 180 grados en LaTeX
- 23. Android Animate Girar
- 24. Girar una imagen en C/C++
- 25. NSInternalInconsistencyException de UIPageViewController al girar
- 26. Cómo dejar de pensar "relacionalmente"
- 27. Girar una UIView en su eje X (eje horizontal)
- 28. Three.js Cómo usar quaternion para girar la cámara
- 29. Cómo "dejar" en expresión lambda?
- 30. Cómo dejar espacio en HTML
suena bien! pero, ¿cómo podría configurar la animación para que la vista gire completamente 390 grados y seguir rodando? – openfrog
@openfrog, esta es la respuesta correcta. Puede rotar la vista rotando explícitamente la capa de la vista con una animación básica. Continuará "rodando" si haces lo que Vladimir ha sugerido. –