2010-06-14 37 views
24

ठीक है, मैंने ऑनलाइन खोज की है और जवाब के लिए कुछ किताबों में भी देखा है क्योंकि मैं एनएसटीमर के लिए सेब प्रलेखन को समझ नहीं सकता। मैं एक ही दृश्य पर 2 टाइमर लागू करने की कोशिश कर रहा हूं कि प्रत्येक के पास 3 बटन हैं (स्टार्ट - स्टॉप - रीसेट)।बेसिक आईफोन टाइमर उदाहरण

पहला टाइमर 2 मिनट से नीचे और फिर बीप से गिना जाता है।

दूसरा टाइमर 00:00 से अनिश्चित काल तक गिना जाता है।

मुझे लगता है कि सभी कोड 3 अलग-अलग बटनों के पीछे विधियों में लिखे जाएंगे, लेकिन मैं एप्पल दस्तावेज़ों को पढ़ने की कोशिश कर रहा हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा।

+0

देखें http://stackoverflow.com/questions/3519562/how-do-i-write-a-timer-in-objective-c –

उत्तर

35

असल में आप जो चाहते हैं वह एक ऐसी घटना है जो हर 1 सेकंड, या संभवतः 1/10 वें दूसरे अंतराल पर आग लगती है, और जब टाइमर टिकता है तो आप अपना यूआई अपडेट करेंगे।

निम्नलिखित टाइमर बनाएगा, और इसे आपके रन लूप में जोड़ देगा। टाइमर को कहीं सेव करें ताकि जब आवश्यक हो तो आप इसे मार सकते हैं।


- (NSTimer*)createTimer { 

    // create timer on run loop 
    return [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES]; 
} 

अब घड़ी टिक के लिए कोई हैंडलर लिखना: उपयोगकर्ता एक बटन दबाता

 
- (void)timerTicked:(NSTimer*)timer { 

    // decrement timer 1 … this is your UI, tick down and redraw 
    [myStopwatch tickDown]; 
    [myStopwatch.view setNeedsDisplay]; 

    // increment timer 2 … bump time and redraw in UI 
    … 
} 

हैं, तो आप गिनती रीसेट कर सकते हैं, या शुरू करने या टिक टिक बंद करो। टाइमर समाप्त करने के लिए, एक अमान्य संदेश भेजें:


- (void)actionStop:(id)sender { 

    // stop the timer 
    [myTimer invalidate]; 
} 

आशा है कि इससे आपकी मदद मिलती है।

+0

सबसे पहले, मदद के लिए बहुत बहुत धन्यवाद लेकिन मैं अभी भी थोड़ा सा हूँ उलझन में। UILabel और IBAction के लिए मैं क्या उपयोग करूं? आपके कोड में ऐसा नहीं लगता है जो वहां होना चाहिए - है ना? – startuprob

+0

I * अत्यधिक * अनुशंसा करते हैं कि आप मैक (आर) ओएस एक्स (3 संस्करण) के लिए हारून हिलेग्रास की पुस्तक, कोको (आर) प्रोग्रामिंग की एक प्रतिलिपि लें। यदि आप इसे पढ़ते हैं और उदाहरणों के माध्यम से काम करते हैं, तो आपको इंटरफेस बिल्डर समेत उद्देश्य-सी और कोको की ठोस समझ प्राप्त होगी। ईमानदारी से, $ 30 और कुछ समय के लिए, यह शायद सबसे अच्छा निवेश है जो आप कर सकते हैं। भागना होगा, बच्चे को खिलाने के लिए! –

+0

हां, आपकी टिप्पणी के जवाब में, मैंने आपके यूआई के कार्यान्वयन को छोड़ दिया। आप सही हैं, आपको UIWindow की आवश्यकता है, जिसमें UIView के साथ कुछ नियंत्रण होते हैं जो उपयोगकर्ताओं को टैप करते समय ईवेंट उत्पन्न करेंगे। ईवेंट को आपके व्यू कंट्रोलर में आईबीएक्शन टैग किए गए तरीकों से रूट करने की आवश्यकता होगी। और जैसा कि आपने कहा था, एक UILabel या दो अपने स्टॉपवॉच रीड-आउट को पकड़ने के लिए। –

11

मैं जोनाथन के दृष्टिकोण का पालन करता हूं सिवाय इसके कि आपको यूएस को अपडेट करने के संदर्भ में एनएसडीएटी का उपयोग करना चाहिए। एनएसटीमर पर आधारित टिक को अपडेट करने के बजाय, जब एनएसटीमर आग लगती है, तो आप अब और आपकी संदर्भ तिथि के लिए एनएसडीएटी के बीच अंतर लेते हैं।

इसका कारण यह है कि एनएसटीमर के पास 50-100 एमएस का संकल्प है जिसका मतलब है कि डिवाइस को धीमा करने के लिए बहुत कुछ चलने पर आपका टाइमर कुछ मिनट बाद बहुत गलत हो सकता है। संदर्भ बिंदु के रूप में NSDate का उपयोग करना सुनिश्चित करेगा कि वास्तविक समय और प्रदर्शित समय के बीच केवल अंतराल उस अंतर की गणना और प्रदर्शन की प्रतिपादन में है।

+1

मुझे पता है कि यह पुराना है, लेकिन किसी को भी इसमें शामिल किया गया है: एनएसटीमर वास्तव में आग के बीच उस संकल्प को बरकरार रखता है, जिसका अर्थ है कि यह हमेशा 50-100 एमएस के संकल्प के साथ सटीक होगा, कभी भी (चरम मामलों के अलावा कुछ भी नहीं) उससे भी बदतर। [एनएसटीमर डॉक्यूमेनेशन] में टाइमर सहिष्णुता देखें (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/)। – nickRise

+0

@robotpsyche सही है, मैंने दो उपकरणों (आईफोन और आईपैड) पर 'एनएसटीमर' का उपयोग करने का प्रयास किया, अनुमान लगाया कि, 20 मिनट में टाइमर के बीच का अंतर 12 सेकंड था !!!, यह स्वीकार्य नहीं है, मैं ' NSDate'। –

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