Saturday 15 February 2014

nstimer - Call an action at specific intervals in iOS -


मैं कोकोस 3 डी में ccactioninterval वाले फ़ंक्शन को खोलने का प्रयास कर रहा हूं । मैं उस फ़ंक्शन को विशिष्ट समय अंतराल पर कॉल करना चाहता हूं। जब मैंने NSTimer की कोशिश की, तो मुझे पता चला कि यह कभी-कभी काम करता है और कभी नहीं। NSTimer makeTarget = [NSTimer अनुसूचित टाइमर विथ टाइम अंतराल: 2.0 लक्ष्य: स्वयं चयनकर्ता: @ सिलेक्टर (बनावट लक्ष्य) उपयोगकर्ता जानकारी: शून्य दोहराता है: हाँ];

यहां बनाएं लक्ष्य को फ़ंक्शन है जिसमें एक्शन इवेंट शामिल हैं I जब मैं फ़ंक्शन सीधे चलाता हूं, तो सिंगल टाइम के लिए ठीक काम करता है। समस्या तब आती है जब मैं इसे शेड्यूल करने की कोशिश करता हूं। मैंने पहले से ही संबंधित प्रश्नों के लिए अलग-अलग तरीके सुझाए हैं। लेकिन कुछ भी मेरे लिए काम नहीं किया । । ।

यहां कोड है

  - (शून्य) addTargets {NSTimer * makeTarget = [NSTimer अनुसूचित टाइमर विथटाइम टाइमः 2.0 लक्ष्य: स्वयं चयनकर्ता: @selector (createTargets) userInfo: शून्य दोहराता: हाँ]; } - (शून्य) बनावट लक्ष्य {CC3MeshNode * target = (CC3MeshNode *) [स्वयं मिलते हैंनाम: @ "ओजज 1"]; इंट मिनवल = -5; Int maxVal = 5; नाव avgVal; AvgVal = maxVal- मिनवल; फ्लोट वैल्यू = ((फ्लोट) arc4random () / ARC4RANDOM_MAX) * avgVal + minVal; [लक्ष्य सेट स्थान: cc3v (मान, 5.0, 0.0)]; CCActionInterval * moveTarget = [CC3MoveBy क्रियाविधि के साथ: 7.0 चाल चलते हैं: cc3v (0.0, -10.0, 0.0)]; CCActionInterval * removeTarget = [CCCallFuncN कार्यवाही लक्ष्य: स्वयं चयनकर्ता: @ सिलेक्टर (हटानेटैग्राइट :)]; [लक्ष्य रन एक्शन: [सीसीएसएक्वेन्सेन एक्शनओन: लेफ्ट लेजिट दो: डिलीट टार्ग]]; } - (शून्य) को हटाएं लक्ष्य: (सीसी 3 मेशन नोड *) टैग {[स्वयं हटाई जानेवाला: टारग]; Targ = nil; }    

अधिक कोड के बिना आपको जो भी समस्या है उसे बताना मुश्किल है, लेकिन यहां कुछ हैं


क्या आप टाइमर के संदर्भ में हैं?

यह उपयोगी हो सकता है डिबगिंग। यदि आपके पास makeTargetTimer नामक एक संपत्ति है, तो आप ऐसा कर सकते हैं:

  NSTimer * makeTargetTimer = [NSTimer अनुसूचित टाइमर विथ टाइम इंटरफ़ेयर: 2.0 लक्ष्य: स्वयं चयनकर्ता: @selector (createTargets) UserInfo: शून्य दोहराता है: हाँ]; Self.makeTargetTimer = makeTargetTimer // बाद में उपयोग के लिए एक संपत्ति में सहेजें (या सिर्फ एक iVar का उपयोग करें)   

एक पुन: उत्पन्न टाइमर को रोकने का एकमात्र तरीका है इसलिए आप यह देख सकते हैं कि क्या यह अमान्य हो गया है।

  BOOLInvalidated = [self.makeTargetTimer isValid];   

इसके साथ आप यह भी अपने dealloc विधि में ऐसा करना चाह सकते हैं:

  - (शून्य) dealloc {[_makeTargetTimer invalidate]; / /   

जब भी प्राप्त किया जाना चाहिए आप स्क्रॉल कर रहे हैं?

यदि आप चाहते हैं कि स्क्रॉल करते वक्त टाइमर निकाल दिया जाए तो आपको NSRunLoopCommonModes का उपयोग करना होगा। इसमें उत्कृष्ट अभिव्यक्ति है <पूर्व> [[NSRunLoop currentRunLoop] addTimer: makeTargetTimer forMode: NSRunLoopCommonModes];


आप createTargets की तरह लागू कर रहे हैं?

  • क्या आपने < कोड> NSLog इस विधि के शरीर पर बयान क्या आप निश्चित हैं कि इसे नहीं बुलाया जा रहा है?

No comments:

Post a Comment