20

एक इशारा संबंधित समस्या मिली। मैंने UISwipeGestureRecognizer को बाएं और दाएं ईवेंट स्वाइप करने के लिए कार्यान्वित किया और यह ठीक काम कर रहा है। हालांकि मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि यूआईस्लाइडर के पास एक ही दृश्य में अच्छा खेल नहीं है। स्लाइडर की स्लाइडिंग गति को स्वाइप बाएं/दाएं के रूप में गलत माना जा रहा है।इशारा समस्या: UISwipeGestureRecognizer + UISlider

किसी ने भी इस समस्या का अनुभव किया है, इसे समझने के लिए कोई विचार है?

बहुत धन्यवाद।

- (void)viewDidLoad { 

      [super viewDidLoad]; 

       //Setup handling of LEFT and RIGHT swipes 
      UISwipeGestureRecognizer *recognizer; 

       recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
       [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; 
       [[self view] addGestureRecognizer:recognizer]; 
       [recognizer release]; 

       recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
       [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)]; 
       [[self view] addGestureRecognizer:recognizer]; 
       [recognizer release]; 
     } 

    -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer { 

     if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) { 
     NSLog(@"Swipe Right"); 
     //Do stuff 
     } 

     if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
     NSLog(@"Swipe Left"); 
     //Do stuff 
     } 
    } 

उत्तर

55

इस संभाल करने के लिए सबसे आसान तरीका शायद अपने स्लाइडर पर छूता देखने से इशारा पहचानकर्ता को रोकने के लिए है:

यहाँ दृश्य नियंत्रक के भीतर निहित कोड है। आप ऐसा कर सकते हैं प्रतिनिधि के रूप में अपने आप को स्थापित करने, और फिर लागू करने

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass:[UISlider class]]) { 
     // prevent recognizing touches on the slider 
     return NO; 
    } 
    return YES; 
} 

अगर यह काम नहीं करता द्वारा, यह संभव स्लाइडर वास्तव में, subviews कि स्पर्श प्राप्त है ताकि आप superview चेन, परीक्षण को चल सका है रास्ते में प्रत्येक दृश्य।

+0

शानदार उत्तर। धन्यवाद! – MrDB

+0

ने इसका परीक्षण किया। यह काम करता हैं। बस इसे इसके बजाय यूआईस्लाइडर कक्षा की जांच करनी पड़ी। – MrDB

+0

ओह, मैंने स्विच कहा था। मैं इसे ठीक कर दूंगा। –

0

केविन ने उपरोक्त प्रतिक्रिया देने से ठीक पहले यह काम पूरा कर लिया। यहां मैंने जो कोड इस्तेमाल किया है, लेकिन केविन के दिखने वाले क्लीनर (नेविन के परीक्षण का परीक्षण नहीं किया है):

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    BOOL AllowSwipes = YES; 

     CGPoint point1 = [touch locationInView:_sliderLeft]; 
     CGPoint point2 = [touch locationInView:_sliderRight]; 

     //Left slider test 
     if ([_sliderLeft hitTest:point1 withEvent:nil] != nil) { 
      AllowSwipes = NO; 
      NSLog(@"On Left Slider"); 
     } 

     //Right slider test 
     if ([_sliderRight hitTest:point2 withEvent:nil] != nil) { 
      AllowSwipes = NO; 
      NSLog(@"On Right Slider"); 
     } 
    } 
    return AllowSwipes; 
} 
संबंधित मुद्दे