我有一个CAEmitterLayer
动画沿着bezier路径(封闭形式,就像'8',四个控制点中的一个)和一个CAKeyframeAnimation
。现在我想通过沿着(但不一定在路径上)触摸手指的滑动来控制动画。这怎么可能,这甚至可能吗?
答案 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
的完整内容,很难说。