2010-12-26 14 views
9

Estoy construyendo una escena con Core Animation que se parece al salvapantallas del antiguo Apple TV. Un flujo continuo de imágenes (cada una a CALayer) pasa verticalmente, de abajo hacia arriba. Para lograr esto, después de que la animación de una capa termina cuando se mueve fuera de la vista, se vuelve a colocar en la parte inferior, se le asigna una nueva imagen y se reanima. Esto tiene lugar en el método delegado animationDidStop. Sin embargo, me he dado cuenta de que si tomo una captura de pantalla cuando ejecuto la aplicación en un iPad, las capas nunca se reposicionan en la parte inferior y no se vuelven a ver. He aislado el problema, y ​​estoy seguro de que está causando capturas de pantalla. Esto me lleva a pensar que tomar una captura de pantalla tiene un efecto en el tiempo de la animación. Entonces ...Captura de pantalla de Core Animation en iPad

  1. ¿Qué impacto tiene tener una captura de pantalla en un iDevice en la animación?
  2. ¿Hay alguna manera mejor de lograr este efecto?
+0

¿Qué método está utilizando para tomar la captura de pantalla? Botón Sleep + Home o Xcode Organizer o 'UIScreenGetImage()'? –

+0

Estoy usando el botón Sleep + Home en el dispositivo. Intenté una captura de pantalla de Xcode y no hubo ningún problema. Con esto en mente, estoy empezando a pensar que el problema tiene algo que ver con la animación "flash" blanca al tomar una captura de pantalla en el dispositivo. – David

+1

En su método '-animationDidStop:', ¿realiza las mismas acciones dependiendo de si la animación ha finalizado o no? Quizás la animación se marca como no terminada cuando se toma una captura de pantalla. – Kemenaran

Respuesta

1

Siempre puede tratar de capturar la captura de pantalla programáticamente en función del contenido de la vista, y luego guardarla como una captura de pantalla. No conozco tus objetos, pero esto es lo que he hecho antes. Todo mi contenido para la captura de pantalla está en CaptureView.

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
UIGraphicsBeginImageContext(CaptureView.frame.size); 

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
[[UIColor clearColor] set]; 
CGContextFillRect(ctx, screenRect); 

[CaptureView.layer renderInContext:ctx]; 

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil); 
UIGraphicsEndImageContext(); 

¿Está su animación en un estacionario UIImageView? Si es la vista de la imagen que desea detectar al salir de la pantalla, simplemente use frame.origin.y en comparación con 0.

0

Puede usar presentationLayer para capturar la captura de pantalla mientras la animación está animando. es decir [CaptureView.layer presentationLayer]

también puede detectar el toque mientras se anima en la presentaciónLayer de CALayer.

Cuestiones relacionadas