2012-06-06 123 views
6

我有一个CAEmitterLayer动画沿bezier路径(封闭的形式,如'8',四个控制点之一)与CAKeyframeAnimation。现在我想通过沿着(但不一定是)路径上的触摸手指滑动来控制动画。这怎么可能,这甚至有可能?如何用触摸手势控制CAKeyframeAnimation?

+0

你的意思是从用户拖动手指的地方发射粒子?另外,你有什么尝试? –

+0

我对objective-c非常陌生,不知道如何通过手指触摸移动沿着路径引导动画(让它成为CAEmitterLayer或UIImageView或图层)。我会很高兴与每一个小暗示... 我试图使用掩模图像,我躺在路径告诉我的手指是或路径上,但除此之外粒子也发出的路径。 – headkit

+0

为什么不通过设置位置属性来将发射层的位置更改为用户手指的位置?获得用户不难的位置。 –

回答

1

做一个CGpoint click;变量来记住您最初的“拖”点,然后创建一个本地NSEvent处理器...

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

“yourDelta”是从当前位置即初始位置的偏移...您还可以通过监视NSEventScrollWheelMask ...并查看e.deltaXe.deltaY值来实现滚动事件的类似结果。

编辑:我不熟悉iOS上的事件处理..但同样的技术可以应用于普通事件处理程序...即。

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

至于“求是”动画..一种可能的方式是简单地[layer addAnimation:theNewAnimation],使用“但而不是基础的fromValue S” 0,或者你的模型layer ...使用。你以前toValue你的layer.presentationLayer值呢?没有看到您的CAKeyframeAnimation的完整内容很难说。

+0

这被标记为'cocoa-touch'我假设OP正在寻找一种方法在iOS设备上执行此操作。 有没有办法根据增量值“寻找”CAKeyframeAnimation? – Marc