2012-06-06 16 views
6

Tengo un CAEmitterLayer animado a lo largo de un camino bezier (forma cerrada, como un '8', de cuatro puntos de control) con un CAKeyframeAnimation. Ahora quiero controlar la animación con una diapositiva de un dedo táctil a lo largo (pero no necesariamente en) la ruta. ¿Cómo es esto posible y esto es posible?¿Cómo controlar CAKeyframeAnimation con gesto táctil?

+0

¿Quiere decir emitir partículas desde donde el usuario está arrastrando su dedo? Además, ¿qué has intentado? –

+0

Soy muy nuevo en Objective-C y no tengo idea de cómo dirigir una animación (que sea un CAEmitterLayer o un UIImageView o capa) a lo largo de una ruta con un movimiento táctil. Sería feliz con cada pequeña sugerencia ... Traté de usar una imagen de máscara que coloqué sobre el camino que me decía que el dedo estaba en o encima del camino pero también las partículas emiten además del camino. – headkit

+0

¿Por qué no simplemente cambia la posición de la capa del emisor a la posición del dedo del usuario estableciendo la propiedad de posición? Obteniendo el punto donde el usuario no es difícil. –

Respuesta

1

Hacer una variable CGpoint click; para recordar su punto de "arrastre" inicial, a continuación, crear un controlador local de NSEvent ...

[NSEvent addLocalMonitorForEventsMatchingMask: NSMouseMovedMask 
              | NSLeftMouseDownMask 
             handler:^(NSEvent *e) { 
    if (e.type == NSLeftMouseDown) click = e.locationInWindow; 
    else "yourDelta" = click - e.locationInWindow; // pseudoCode 
    return e; 
}]; 

"yourDelta" es el desplazamiento de ese punto inicial desde la ubicación actual ... también puede obtener resultados similares con eventos de desplazamiento, monitoreando NSEventScrollWheelMask ... y mirando los valores e.deltaX y e.deltaY.

Editar: No estoy tan familiarizado con el manejo de eventos en iOS ... pero la misma técnica podría aplicarse con controladores de eventos normales ... es decir.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)e { 
    click = [e locationInView:_yourView];  
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)e { 
    "yourDelta" = click - [e locationInView:_yourView]; // pseudoCode 
} 

En cuanto a "buscar" la animación .. Una manera posible es simplemente [layer addAnimation:theNewAnimation], usando sus anteriores toValue 's, pero en lugar de basar las fromValue' s de 0, o su modelo ... layer uso sus valores de layer.presentationLayer en su lugar? Es difícil de decir sin ver el contenido completo de su CAKeyframeAnimation.

+0

Al estar etiquetado con 'cocoa-touch', asumí que el OP estaba buscando una forma de hacerlo en un dispositivo con iOS. ¿Hay forma de 'buscar' la CAKeyframeAnimation en función del valor delta? – Marc

Cuestiones relacionadas