2012-02-04 14 views
6

पर एक UIPangesturerecognizer जोड़ता हूं मेरे पास एक स्क्रॉल व्यू है और जब भी कोई पैन किया जाता है तो मैं इसे गायब करना चाहता हूं। यह ठीक काम करता है और पैनिंग पर, स्क्रॉलव्यू गायब हो जाता है लेकिन समस्या अब मैं सामग्री को स्क्रॉल नहीं कर सकता।स्क्रॉलिंग अक्षम है जब मैं UIScrollView

[UIView animateWithDuration:0.2 
         delay:0.2 
        options: UIViewAnimationCurveLinear 
       animations:^{ 
        slideView.frame=CGRectMake(268, 0, 500, 950); 
        curtain.frame=CGRectMake(0, 0, 268, 950); 
        curtain.backgroundColor=[[UIColor alloc]initWithRed:0 green:0 blue:0 alpha:0.6]; 
        [self.view addSubview:slideView]; 
        [self.view addSubview:curtain]; 

       } 
       completion:^(BOOL finished){ 
        NSLog(@"Done!"); 
       }]; 

यह कैसे मैं कैसे मैं अपने UIScrollView प्रकट करने के लिए बनाने के (slideview scrollview है) .और फिर मैं एक pangesturerecognizer.All ठीक काम करता है, लेकिन स्क्रॉल अक्षम किया गया है जोड़ है। (panImage फिर से मेरे स्लाइडव्यू छुपाता है।) स्क्रॉलिंग काम कैसे करें .??

[slideView addGestureRecognizer:panImage]; 

उत्तर

12

UIScrollView का अपना पैन इशारा पहचानकर्ता है, जो स्क्रॉल नियंत्रण है। एक और पैन इशारा पहचानकर्ता जोड़कर, आप स्क्रॉल व्यू के अपने पैन इशारा पहचानकर्ता को काम करने से रोक रहे हैं।

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

उदाहरण के लिए, आप पहचानकर्ताओं को एक साथ काम करने की अनुमति देने के लिए दोनों इशारा पहचानकर्ताओं के प्रतिनिधियों को सेट कर सकते हैं (gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: विधि को ओवरराइड करके)। आप प्रत्येक इशारा पहचानकर्ता को अलग-अलग स्पर्शों की आवश्यकता होती है (minimumNumberOfTouches और maximumNumberOfTouches गुणों को सेट करके)। आप बर्खास्तगी संकेत को पहचानने के लिए UISwipeGestureRecognizer का उपयोग कर सकते हैं। आप स्क्रॉल व्यू के प्रतिनिधि के scrollViewDidScroll: विधि को ओवरराइड करके स्क्रॉल व्यू के बाएं किनारे से पहले स्क्रॉल करने का प्रयास करते समय पता लगा सकते हैं।

+1

आपको एकाधिक को पहचानना होगा एक साथ संकेत, लेकिन आपको अपने इशारे को संभालने के दौरान स्क्रॉलिंग को अक्षम करने की भी आवश्यकता है। @miroslav देखें। – SwiftArchitect

2

आप मैन्युअल रूप से अपने पैनगेशर रिकॉग्नाइज़र की प्राथमिकताओं को सेट कर सकते हैं। इस तरह मैंने एक ही समस्या हल की: प्रतिनिधि (बूल) इशारा में पहचानकर्ता शॉल्डबिन: मैंने स्क्रॉलिंग को मेरे स्क्रॉल में अक्षम कर दिया है यदि इसे हाँ वापस करना चाहिए। और मेरे PanGestureRecognizer के एक चयनकर्ता की शुरुआत में मैंने स्क्रॉलिंग सक्षम की।

इस प्रतिनिधि में आप इस तरह से सक्षम करने के लिए अपने पैनगेशर रिकॉग्नाइज़र की स्थिति बना सकते हैं, यह काम करेगा यदि केवल और यदि आप इसे प्राथमिकता चाहते हैं।

1

स्विफ्ट विधि,
को अपनी कक्षा में UIGestureRecognizerDelegate जोड़ने की आवश्यकता है:

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

आवश्यकता आत्म करने के लिए अपने प्रतिनिधि सेट करने के लिए:

override func viewDidLoad() { 
    super.viewDidLoad() 
    var scrollView = UIScrollView(frame: self.view.frame) 
    scrollView.delegate = self 
} 

सक्रिय एक साथ इशारों को अपने वर्ग के तरीकों में इस हिस्से में जोड़ें :

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 
संबंधित मुद्दे