2014-10-07 11 views
7

मैं एक UIViewController पर एक viewDidLoad में निम्नलिखित कोड है:UIScreenEdgePanGestureRecognizer ट्रिगर कई बार

UIScreenEdgePanGestureRecognizer *edgeRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightEdgeSwipe:)]; 
edgeRecognizer.edges = UIRectEdgeRight; 
[self.view addGestureRecognizer:edgeRecognizer]; 

और प्रयोजनों जब एक दाहिने किनारे इशारा का पता चला है में स्लाइड करने के लिए एक दृश्य को गति प्रदान करने के लिए है।

-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender 
{ 
NSLog(@"Showing Side Bar"); 
[self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight]; 
} 

लेकिन मैं देख रहा हूँ कि "handleRightEdgeSwipe" समारोह कई बार शुरू हो रहा है - कभी कभी 5 बार साइड बार का मानना ​​है कि आसानी से में स्लाइड चेतन चाहिए कई बार फ़्लैश बनाता है।

(नोट: मैंने UIButton से देखने के लिए दृश्य को ट्रिगर करने का प्रयास किया और यह ठीक काम करता है)।

दायां किनारा इशारा क्यों कई बार ट्रिगर किया गया है और मैं इसे कैसे ठीक कर सकता हूं?

+1

यदि आप इसे स्थानांतरित करना चाहते हैं, तो अपनी उंगली से खींचें, आपको इसके बजाय एक UISwipeGestureRecognizer का उपयोग करना चाहिए। यह निरंतर गति की बजाय एक घटना को पहचानता है। – rdelmar

+0

@rdelmar मैं केवल एक किनारे स्वाइप पर ट्रिगर करना चाहता हूँ। मैं सही किनारे पर UISwipeGestureRecognizer का उपयोग कैसे कर सकता हूं? – motionpotion

+0

क्रिया विधि में, आपको locationInView के मान को देखने की आवश्यकता है: और केवल उस क्रिया का ट्रिगर करें यदि उस स्थान का x मान उस क्षेत्र के भीतर है जो आप चाहते हैं। – rdelmar

उत्तर

3

यह इशारा एक एकल शॉट घटना नहीं है लेकिन निरंतर है।

handleRightEdgeSwipe: को कभी भी sender.state परिवर्तन या स्पर्श के चारों ओर स्थानांतरित किया जाता है। आपको इशारे के state और locationInView: के आधार पर UIButton स्थानांतरित करना होगा।

+0

क्या आपके पास आपके उत्तर के लिए एक उदाहरण है? मैं केवल दाएं किनारे पर ट्रिगर करना चाहता हूं। – motionpotion

+0

यहां [एक ट्यूटोरियल] है (http://iphonedev.tv/blog/2014/3/21/screen-edge-swipe-gesture-on-iphone-using-the-uiscreenedgepangesturerecognizer-tutorial) [गिटहब पर स्रोत] के साथ (https://github.com/PaulSolt/UIScreenEdgePanGestureDemo) जो आपकी मदद करनी चाहिए। – fluidsonic

16

जैसा कि ध्यान दिया गया है, UIScreenEdgePanGestureRecognizer आपके क्रिया को कई बार आमंत्रित करता है क्योंकि जेस्चर रिकॉग्नाइज़र परिवर्तन की स्थिति बदलती है। राज्यUIGestureRecognizer कक्षा की संपत्ति के लिए दस्तावेज़ देखें। इसलिए, आपके मामले में मेरा मानना ​​है कि जिस उत्तर को आप ढूंढ रहे हैं वह यह जांचना है कि क्या राज्य "समाप्त" है या नहीं। इस प्रकार:

-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     NSLog(@"Showing Side Bar"); 
     [self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight]; 
    } 
} 
संबंधित मुद्दे