usar para funciona como appstore apps apple app iphone objective-c macos core-animation calayer

iphone - para - Observando cambios de propiedades animadas en un CALayer



como funciona clips de apple (2)

Creo que has nombrado todas las posibilidades. De hecho, ni siquiera estaba al tanto de los números 2 y 3 y escribí el libro sobre Core Animation . ;-)

KVO no está disponible para estas propiedades. Estaría bien si lo fuera, pero creo que la razón de esto tiene que ver con los gastos generales que llevaría. El valor se actualizaría con mucha frecuencia y tendría que volver a llamar a cualquier observador.

De todos modos, he encontrado que el NSTimer es el enfoque más confiable, pero ahora no estoy seguro de lo que has dicho. ¿Qué te hace pensar que el temporizador no está sincronizado? ¿Por qué es difícil hacer que el temporizador solo se dispare cuando la animación se está ejecutando? ¿No puede simplemente verificar la condición que desea en la devolución de llamada del temporizador y luego no hacer nada si no se cumple la condición?

Atentamente.

Tengo un CABasicAnimation que anima una propiedad de un CALayer por ejemplo, bounds.origin . Quiero poder observar cómo cambia la propiedad con el tiempo, pero realmente no he encontrado un método que funcione al 100%.

  1. Intenté usar KVO (observación de clave-valor) en la bounds.origin acceso de la página bounds.origin Lays. El sistema se queja de que el objeto se libera antes de que se liberen sus observadores, lo que me lleva a pensar que la capa de presentación es solo temporal. La observación de presentationLayer.bounds.origin como keypath no funciona.

  2. Intenté crear una propiedad en otra capa y animar eso, por ejemplo, declarando la @property y convirtiéndola en @dynamic en esa capa. Sin embargo, esta nueva propiedad solo se modifica cuando se accede a la capa de presentación (por ejemplo, al final de la animación), parece que no se actualiza mientras se ejecuta la animación.

  3. Utilicé needsDisplayForKey en la propiedad en el # 2, que needsDisplayForKey las actualizaciones durante la animación, pero para estos problemas:

    • solo funciona si CALayer tiene un marco distinto de cero. Como esta capa puede ser un CAShapeLayer o una subclase, puede tener un cuadro cero.
    • parece que activa setNeedsDisplay para esa capa, pero como no estoy dibujando esa capa solo monitoreando el cambio de propiedad, no quiero que se vuelva a dibujar.
  4. Intenté programar un NSTimer , y dentro de la devolución de llamada del temporizador, NSTimer el presentationLayer . Esto también funciona pero para estas cuestiones:

    • El temporizador probablemente no esté sincronizado con la actualización de la animación.
    • Dado que ocasionalmente la animación original se anticipa a otra animación, es difícil hacer que el temporizador se active cuando la animación se está ejecutando y solo cuando la animación se está ejecutando.

¿Alguna sugerencia? Todo esto estaría en iPhoneOS 3.0 / 3.1.