iPhone

2010-10-25 14 views
5

मैं जो मुझे अगर बटन & उपयोग किया जा चुका है आयोजित 6 सेकंड & तो एक कार्रवाई जो ध्वनि किसी प्रकार का खेल रहा है आग के लिए दबाव की जाँच करने की आवश्यकता है एक iPhone अनुप्रयोग पर काम कर रहा हूँ पर लंबे समय नल का पता लगाने।iPhone

मुझे यह 6 सेकंड टैप कैसे पता लगाना चाहिए?

दूसरी तरफ उपयोगकर्ता 6 सेकंड & के लिए टैपिंग बटन भी रख सकता है, तो उसी क्रिया को आग लगनी चाहिए।

मुझे कई नल के साथ क्या करना चाहिए, मुझे कैसे पता चलेगा कि सभी नलियां 6 सेकंड ब्रैकेट के नीचे आती हैं?

उत्तर

17

एक छह दूसरी देर तक दबाए रखने के लिए, अपने minimumPressDuration संपत्ति के लिए 6.

सेट के साथ एक UILongPressGestureRecognizer का उपयोग लिखें अपनी खुद की gesture recognizer (जैसे कि, LongTappingGestureRecognizer) एक निश्चित अवधि के लिए निरंतर दोहन के लिए; यह बहुत मुश्किल नहीं होना चाहिए। यह UILongPressGestureRecognizer के minimumPressDuration की तरह एक संपत्ति (जैसे कि, minimumTappingDuration) और एक संपत्ति (जैसे कि, maximumLiftTime) निर्धारित करता है कि कितनी देर तक एक उंगली उठाया जा सकता है इससे पहले कि यह एक लंबे दोहन इशारा नहीं माना जाता है दे।

  • जब वह पहली बार touchesBegan:withEvent: प्राप्त करता है, समय रिकॉर्ड है।
  • जब यह touchesEnded:withEvent: प्राप्त करता है, एक NSTimer (लिफ्ट टाइमर) शुरू कि maximumLiftTime के बाद इशारा पहचानकर्ता भेजता संदेश को रद्द (जैसे cancelRecognition)।
  • जब इसे प्रारंभ समय होने पर touchesBegan:withEvent: प्राप्त होता है, तो लिफ्ट टाइमर (यदि कोई हो) रद्द करें।
  • cancelRecognitionfailed state में संक्रमण होगा।

जब इशारा के अंत minimumTappingDuration के बाद, तक पहुँच जाता है पहचानने से निपटने के लिए विभिन्न रणनीतियों रहे हैं। यदि वर्तमान समय और प्रारंभ समय के बीच का अंतर> = minimumTappingDuration है तो touchesBegan:withEvent: और touchesEnded:withEvent: हैंडलर दोनों में जांच करना है। इस के साथ समस्या यह है कि यह अब की तुलना में minimumTappingDuration ले इशारा पहचान करने के लिए होगा अगर उपयोगकर्ता धीरे दोहन किया जाता है और hir उंगली नीचे है जब minimumTappingDuration तक पहुँच जाता है है। एक और तरीका एक और एनएसटीमर (पहचान टाइमर) शुरू करना है जब पहला touchesBegan:withEvent: प्राप्त होता है, जो recognized state में संक्रमण का कारण बनता है और इसे cancelRecognition में रद्द कर दिया जाता है। यहाँ मुश्किल बात करता है, तो उंगली उठाया है जब टाइमर आग करने के लिए क्या है। सबसे अच्छा तरीका दोनों का एक संयोजन है, तो उंगली उठाया है हो सकता है, मान्यता टाइमर अनदेखी।

विवरण के लिए और भी कुछ है, लेकिन यह बात है। असल में, यह एक लंबे प्रेस पहचानकर्ता संक्षिप्त अवधि के लिए स्क्रीन बंद उपयोगकर्ता लिफ्ट hir उंगली देता है कि है। आप संभवतः सिर्फ दोहन पहचानकर्ता का उपयोग करें और देर तक दबाए रखने पहचानकर्ता को छोड़ सकता है।

0

मेरा समाधान यहां है।

- (IBAction) micButtonTouchedDownAction { 
    self.micButtonTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(micButtonAction:) userInfo:nil repeats:YES]; 
    self.micButtonReleased = FALSE; 
} 

- (IBAction) micButtonTouchedUpInsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (IBAction) micButtonTouchedUpOutsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (void) micButtonAction:(NSTimer *)timer { 
    [self.micButtonTimer invalidate]; 
    self.micButtonTimer = nil; 

    if(self.micButtonReleased) { 
     NSLog(@"Tapped"); 
    } 
    else { 
     NSLog(@"Touched"); 
    } 
} 
9

मुझे एहसास है कि यह काफी दिनांकित प्रश्न है, हालांकि उत्तर बहुत सरल होना चाहिए।

अपने दृश्य नियंत्रक viewDidLoad में:

//create long press gesture recognizer(gestureHandler will be triggered after gesture is detected) 
UILongPressGestureRecognizer* longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(gestureHandler:)]; 
//adjust time interval(floating value CFTimeInterval in seconds) 
[longPressGesture setMinimumPressDuration:6.0]; 
//add gesture to view you want to listen for it(note that if you want whole view to "listen" for gestures you should add gesture to self.view instead) 
[self.m_pTable addGestureRecognizer:longPressGesture]; 
[longPressGesture release]; 
फिर अपने gestureHandler में

:

-(void)gestureHandler:(UISwipeGestureRecognizer *)gesture 
{ 
    if(UIGestureRecognizerStateBegan == gesture.state) 
    {//your code here 

    /*uncomment this to get which exact row was long pressed 
    CGPoint location = [gesture locationInView:self.m_pTable]; 
    NSIndexPath *swipedIndexPath = [self.m_pTable indexPathForRowAtPoint:location];*/ 
    } 
} 
+0

Fwiw, ओपी दो स्थितियों है कि मान्यता प्राप्त होना चाहिए वर्णन करता है। एक एक लंबी प्रेस है (जो इस कोड का पता लगाता है)। दूसरा छः-सेकंड की अवधि में दोहराया गया टैपिंग है (जिसे यह कोड नहीं पता है, मुझे लगता है?)। वैसे भी, उपर्युक्त कोड अधिकांश लोगों के लिए उपयोगी होगा, जो सिर्फ यह जानना चाहते हैं कि लंबी प्रेस के लिए न्यूनतम लंबाई आवश्यकता कैसे निर्धारित करें। – ToolmakerSteve