2012-06-06 22 views
6

मेरे पास CAEmitterLayerCAKeyframeAnimation के साथ एक बेजियर पथ (बंद फॉर्म, एक '8' की तरह, चार नियंत्रण बिंदुओं के साथ एनिमेटेड) के साथ एनिमेटेड है। अब मैं एनीमेशन को टच-उंगली की एक स्लाइड (लेकिन जरूरी नहीं) पथ से नियंत्रित करना चाहता हूं। यह कैसे संभव है और यह भी संभव है?स्पर्श जेस्चर के साथ CAKeyframe एनीमेशन को कैसे नियंत्रित करें?

+0

क्या आप कण उत्सर्जित करते हैं जहां उपयोगकर्ता अपनी उंगली खींच रहा है? इसके अलावा, आपने क्या प्रयास किया है? –

+0

मैं उद्देश्य-सी के लिए बहुत नया हूं और मुझे पता नहीं है कि एक एनीमेशन का नेतृत्व कैसे करें (इसे एक सीएइमिटरलेयर या यूआईएममेज व्यू या लेयर) एक उंगली स्पर्श आंदोलन के साथ पथ के साथ। मैं हर छोटी संकेत से खुश रहूंगा ... मैंने एक मुखौटा-छवि का उपयोग करने की कोशिश की जिसे मैंने पथ पर रखा था जिसने मुझे बताया कि उंगली के बारे में मुझे बताया गया था या पथ के अलावा, लेकिन कण भी पथ के अलावा उत्सर्जित करते थे। – 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.deltaX और e.deltaY मानों को देखकर।

संपादित करें: मैं आईओएस पर ईवेंट हैंडलिंग से परिचित नहीं हूं .. लेकिन उसी तकनीक को सामान्य ईवेंट हैंडलर के साथ लागू किया जा सकता है ... यानी।

- (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] है, 0, या अपने मॉडल layer ... उपयोग की s ', लेकिन इसके बजाय fromValue आधारित के s' अपने पिछले toValue का उपयोग कर इसके बजाय layer.presentationLayer मूल्य? अपने CAKeyframeAnimation की पूरी सामग्री को देखे बिना कहना मुश्किल है।

+0

इसे 'कोको-टच' के साथ टैग किया जा रहा है, मुझे लगता है कि ओपी आईओएस डिवाइस पर ऐसा करने का एक तरीका ढूंढ रहा था। डेल्टा मूल्य के आधार पर CAKeyframeAnimation 'तलाश' करने का कोई तरीका है? – Marc