2012-07-18 21 views
5

एकाधिक NSTimer उदाहरणों के बिना, एक अनुक्रम में विभिन्न अंतराल के साथ एक विशिष्ट या एकाधिक विधि को आग लगाने के लिए NSTimer कैसे प्राप्त करेगा। उदाहरण के लिए method1 (0.3 सेकंड), method2 (0.5), method3 (0.7) और इसी तरह।अनुक्रम में एकाधिक समय अंतराल के साथ एनएसटीमर

अगर कोई कोई उदाहरण कोड साझा कर सकता है तो मैं सराहना करता हूं।

उत्तर

5

मुझे यकीन नहीं है कि आपका अंतिम लक्ष्य इस के साथ क्या है लेकिन आपका प्रश्न पढ़ने के बाद मैं निम्नलिखित तरीके से को आजमाने की सलाह दूंगा, शायद यही वह है जिसे आप देखना चाहते हैं।

आपको यह कोड रखना चाहिए जहां आप आम तौर पर अलग अंतराल के साथ NSTimer कक्षा शुरू करना चाहते थे (दुर्भाग्य से क्या संभव नहीं है)।

{ 
    // ... 
    [self performSelector:@selector(method1) withObject:nil afterDelay:0.3f]; 
    [self performSelector:@selector(method2) withObject:nil afterDelay:0.5f]; 
    [self performSelector:@selector(method3) withObject:nil afterDelay:0.7f]; 
    // ... 
} 

और जब उन सभी चयनकर्ताओं को कतारबद्ध करने की आवश्यकता हो, तो इस कोड का उपयोग करें।

[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
+1

धन्यवाद, मैंने पहले से ही एक ही कोड का उपयोग किया है, इसके अतिरिक्त मैंने कतारबद्ध अनुरोधों को रद्द करने का तरीका जोड़ा है। –

4

NSTimer स्वयं उस कार्यक्षमता प्रदान नहीं करता है, यह निश्चित अंतराल पर या तो बार-बार या बार-बार आग लग जाता है। इस प्रभाव को प्राप्त करने के लिए आपको कई टाइमर की आवश्यकता होगी, या NSTimer से पूरी तरह से दूर जाना होगा।

-3

चयनकर्ता विधि में वहाँ से 0.1 timeinterval साथ चयनकर्ता के साथ एक घड़ी बनाने के =, आप एक स्थिर नाव चर रखकर की जाँच करें और जैसे हर इसे करने के लिए 0.1 जोड़ सकते हैं:

static CGFloat counter= 0; 

counter+= 0.1; 

तो काउंटर मान की जाँच और अपने तरीकों को कॉल करें ..

if(0.3 == counter) 
{ 
    [self callMethod1]; 
} 
else if(0.5 == counter) 
{ 
    [self callMethod2]; 
} 
else if(0.7 == counter) 
{ 
    [self callMethod3]; 
} 
... 
... 
.. 
.. 
+0

== के साथ फ्लोट की तुलना करना समस्या के लिए पूछ रहा है क्योंकि वे दशमलव प्रतिनिधित्व के बाइनरी अनुमान हैं। – jbat100

+0

लेकिन हम केवल हमारे कोड के भीतर 0.1 जोड़ रहे हैं और काउंटर वैल्यू टाइमर जैसे अनिश्चित कारकों के आधार पर गणनाओं से अनुमानित नहीं हैं। काउंटर वैल्यू टाइमर फायर अंतराल पर निर्भर नहीं हैं बल्कि यह इस बात पर निर्भर करता है कि विधि कितनी बार लागू की जाती है। यह 'i + = 1 जैसा है; इसलिए कोई समस्या नहीं होनी चाहिए। – samfisher

+1

एक पूर्णांक का उपयोग करने के लिए बेहतर, प्रत्येक 100 मिलीसेकंड द्वारा पूर्णांक को बढ़ाएं, और 'अगर ((काउंटर% 3) == 0) 'आदि का उपयोग करें ... – dreamlax

0

मुझे लगता है कि आपको निकाले गए चयनकर्ता को वर्तमान समय अंतराल पारित करना चाहिए और आगे इसे संभालना चाहिए। अगर समय अंतराल 0.3 है आप कॉल Method1, 0.5 - Method2, वहाँ सबसे अधिक संभावना को लागू करने के लिए इस

-1

इस तरह NSTimer विधि कॉल रैप करने के लिए एक आवरण बनाने कोई दूसरा रास्ता नहीं है:

- (void) CallTimerWithTimeInterval:(float) interval andSelector:(NSString *)methodName 
{ 
SEL selector = selectorFromString(methodName); 
    [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(selector) userInfo:nil repeats:YES]; 
} 

आप इस विधि को कॉल कर सकते हैं और अपनी आवश्यकता के अनुसार अंतराल और चयनकर्ता विधि को पास कर सकते हैं।

+0

धन्यवाद, मैंने दूसरी विधि का उपयोग किया है। बीटीडब्ल्यू अगर मैं इस विधि का उपयोग करता हूं, तो क्या मुझे किसी भी स्तर पर टाइमर को रोकना या नील करना है? मैं इसे कैसे प्राप्त करूं? –

+0

टाइमर को रोकने के लिए आपको 'दोहराना' पैरामीटर को 'NO' पर सेट करने की आवश्यकता है। आप रैपर फ़ंक्शन में एक और पैरामीटर जोड़ कर ऐसा कर सकते हैं। '- (शून्य) CallTimerWithTimeInterval: (फ्लोट) अंतराल और चयनकर्ता: (एनएसएसटींग *) विधि नाम के साथ नाम: (बूल) YESORNO'। –

+0

सहायता के लिए धन्यवाद, सिर्फ उत्सुकता है कि यह दृष्टिकोण मैंने चुना है उससे बेहतर है। परिदृश्य यह है कि मुझे इस विधि को कई बार कहना होगा कि 10 बार कहें। यह एनएसटीमर की 10 प्रतियां विशेष समय पर आग लगने के लिए तैयार करेगा। अब अगर कहीं और मैं टाइमर को एक बार में समाप्त करना चाहता हूं, तो दोहराया नहीं जा सकता है क्योंकि इसे फिर से होने वाली घटनाओं के लिए रोकना नहीं है। एक बार 10 प्रतियां निर्धारित की गई हैं, तो मैं इसे कैसे रोकूं। एनएसटीमर का एक इंस्टेंस वैरिएबल बनाएं और फिर एक शून्य संदेश भेजें? –

संबंधित मुद्दे