visuales sirve reducir quitar que programas para movimiento efectos efecto desactivar como app animaciones animacion activar ios iphone cocoa-touch uikit core-animation

ios - sirve - ¿Cómo especificar un tiempo de inicio para una animación utilizando CFTimeInterval?



programas de animacion 3d para android (4)

Creo que la documentación de CAMediaTiming Protocol es muy mala. Time Warp in Animation es una explicación (re-documentación) completa de todas las propiedades del Protocolo de Tiempo de CAMedia.

A mi entender, el tiempo de inicio se puede usar para decir "hey, comience a las 12:00 en punto". Pero, ¿cómo podría decir esto con un tipo CFTimeInterval? Pensé que este no es más que un tipo de valor "flotante" para especificar segundos.

O, ¿qué otra cosa sería la diferencia con la propiedad timeOffset que se especifica en el protocolo CAMediaTiming?


Lo que me perdí en la documentación: beginTime está en "tiempo absoluto de animación principal", por lo que debe obtener la hora actual y especificar su desplazamiento a partir de eso:

// Start in 5 seconds theAnimation.beginTime = CACurrentMediaTime()+5;


No, eso no es lo que hace beginTime. Especifica una hora de inicio relativa a partir de su animación principal (por defecto, varias animaciones en un grupo se activan al mismo tiempo).

De la documentation :

Especifica la hora de inicio del receptor en relación con su objeto principal, si corresponde.

timeOffset hace que comience a animarse en el fotograma en el que se encuentra en el momento de desactivación, y cuando llega al final, se desplaza. En otras palabras, imagine que A, B, C, D, E son cuadros de animación, esto es lo que sucede en varios casos si establece el tiempo de inicio o el tiempo en un valor igual a cuando toca el cuadro C en el caso normal.

Normal |A->B->C->D->E beginTime: | A->B->C->D->E timeOffset: |C->D->E->A->B


Primero debes convertir al espacio de tiempo de la capa de esta manera:

let currentLayerTime = myLayer.convertTime(CACurrentMediaTime(), fromLayer: nil)

A continuación, puede establecer el tiempo de inicio en relación con el tiempo actual de la capa. Por ejemplo, para hacer que una animación comience en 2s:

myAnimation.beginTime = currentLayerTime + 2

También es probable que desees establecer el ''fillMode'' al revés, para que puedas establecer el valor final de la propiedad antes de agregar la animación:

myAnimation.fillMode = kCAFillModeBackwards myLayer.someProperty = someFinalValue myLayer.addAnimation(myAnimation, forKey: "myAnimationName")