如何用触摸手势控制CAKeyframeAnimation?

时间:2012-06-06 14:05:26

标签: objective-c cocoa-touch path core-animation caemitterlayer

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

1 个答案:

答案 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.deltaX和滚动事件来获得类似的结果e.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]简单地toValue,而不是基于fromValue的0,或您的模型layer ...使用您的layer.presentationLayer值代替?如果没有看到CAKeyframeAnimation的完整内容,很难说。