2012-06-06 122 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