मैंने UIWebView ऑब्जेक्ट्स को स्क्रॉल करने और बाउंस करने से रोकने के लिए थोड़ा अलग तरीका आजमाया : अन्य जेस्चर को ओवरराइड करने के लिए एक जेस्चर पहचानकर्ता को जोड़ा।
ऐसा लगता है, उपयोगकर्ता स्क्रॉलिंग का पता लगाने के लिए UIWebView या इसके स्क्रोलर सबव्यू अपने स्वयं के पैन जेस्चर पहचानकर्ता का उपयोग करते हैं। लेकिन Apple के प्रलेखन के अनुसार एक जेस्चर पहचानकर्ता को दूसरे के साथ ओवरराइड करने का एक वैध तरीका है। UIGestureRecognizerDelegate प्रोटोकॉल एक विधि है gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer: - जो किसी भी टकराने इशारा recognizers के व्यवहार को नियंत्रित करने के लिए अनुमति देता है।
इसलिए, मैंने जो किया वह किया
नियंत्रक के दृष्टिकोण में देखें
// Install a pan gesture recognizer // We ignore all the touches except the first and try to prevent other pan gestures
// by registering this object as the recognizer's delegate
UIPanGestureRecognizer *recognizer;
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
recognizer.delegate = self;
recognizer.maximumNumberOfTouches = 1;
[self.view addGestureRecognizer:recognizer];
self.panGestureFixer = recognizer;
[recognizer release];
तब, जेस्चर ओवरराइड विधि:
// Control gestures precedence
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
// Prevent all panning gestures (which do nothing but scroll webViews, something we want to disable in
// the most painless way)
if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
{
// Just disable every other pan gesture recognizer right away
otherGestureRecognizer.enabled = FALSE;
}
return NO;
}
निश्चित रूप से, यह प्रतिनिधि पद्धति मुझे एक वास्तविक एप्लिकेशन में अधिक जटिल बना सकती है - हम अन्य पहचानकर्ताओं को चुनिंदा रूप से अक्षम कर सकते हैं, अन्य GestureRecognizer.view का विश्लेषण कर सकते हैं और यह देखने के आधार पर निर्णय ले सकते हैं।
और, अंत में, पूर्णता की खातिर, जिस विधि को हमने पैन हैंडलर के रूप में पंजीकृत किया है:
- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer
{
// do nothing as of yet
}
यह खाली हो सकता है अगर हम चाहते हैं कि वेब दृश्यों को स्क्रॉल करना और बाउंस करना रद्द करना है, या यह उस तरह के पैन गतियों और एनिमेशन को लागू करने के लिए हमारा अपना कोड हो सकता है जो हम वास्तव में चाहते हैं ...
अभी तक मैं यह सब सामान के साथ प्रयोग कर रहा हूं, और ऐसा लगता है कि मैं इसे कम से कम काम करना चाहता हूं। मैंने किसी भी ऐप को iStore में सबमिट करने की कोशिश नहीं की है, हालाँकि। लेकिन मेरा मानना है कि मैंने अब तक किसी भी चीज का उपयोग नहीं किया है ... अगर किसी को यह नहीं मिलता है, तो कृपया मुझे सूचित करें।