मैं अपने पहले आईओएस ऐप पर काम कर रहा हूं, और पहले स्नैग में भाग गया हूं, जिसके लिए मुझे कोई अच्छा जवाब नहीं मिला है।उद्देश्य सी और आईओएस: एक टाइमर चल रहा है? एनएसटीमर/थ्रेड/एनएसडीएटी/आदि
समस्या: मेरे पास कस्टम UIGestureRecognizer
है और यह सब ठीक से तारित है, और मैं पहचान के बाद @selector
में प्रत्येक स्पर्श के लिए कोड चला सकता हूं। यह ज्यादातर चीजों के लिए ठीक रहा है, लेकिन यह दूसरों के लिए थोड़ा अधिक इनपुट है।
मेरा लक्ष्य: एक टाइमर बनाने के लिए जो तर्क चलाने के लिए निर्दिष्ट अंतराल पर ट्रिगर करता है, और इस समय इसे रद्द करने में सक्षम होने के लिए स्पर्श रद्द कर दिए जाते हैं।
मैं यहां क्यों पूछ रहा हूं: समाधान के लिए बहुत सी संभावनाएं हैं, लेकिन कोई भी लागू करने के लिए सबसे अच्छा नहीं है। अब तक यह की तरह
performSelector
(और इस पर कुछ रूपों) लगता हैNSThread
NSTimer
NSDate
- ऑपरेशन कतार
- मुझे लगता है कि मैं कुछ अन्य लोगों के रूप में अच्छी तरह मिला ...
सभी शोधों से, धागे बनाने का कुछ रूप जाने का मार्ग लगता है, लेकिन मुझे एक नुकसान हुआ है जिस पर इस स्थिति के लिए सबसे अच्छा काम करेगा।
कार्यान्वयन का एक उदाहरण: NSPoint
हर 0.10 सेकंड में लिया जाता है, और पिछले और वर्तमान बिंदु के बीच की दूरी ले ली जाती है। [हर बिंदु के बीच की दूरी लेना बहुत गन्दा परिणाम दे रहा था]।
प्रासंगिक कोड:
- (void)viewDidLoad {
CUIVerticalSwipeHold *vSwipe =
[[CUIVerticalSwipeHold alloc]
initWithTarget:self
action:@selector(touchHoldMove:)];
[self.view addGestureRecognizer:vSwipe];
[vSwipe requireGestureRecognizerToFail:doubleTap];
}
...
- (IBAction)touchHoldMove:(UIGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
}
if (sender.state == UIGestureRecognizerStateBegan) {
}
//other stuff to do goes here
}
नोट: इसे अमान्य करने के बाद टाइमर को शून्य पर सेट करने के लिए अच्छा अभ्यास माना जाता है: [theTimer अमान्य]; theTimer = शून्य; – Groot