2011-03-07 11 views
5

मैं अपने आईपैड ऐप में छवियों को दिखाने के लिए ज़ूमिंग यूआईएसक्रॉल व्यू का उपयोग कर रहा हूं। ज़ूमिंग बहुत अच्छा काम करता है, एक चुटकी एक छवि को छोटे या बड़े के रूप में उपयुक्त बनाता है। मेरे पास bouncesZoom भी सक्षम है ताकि उपयोगकर्ता इसे न्यूनतम या अधिकतम ज़ूम पर वापस लाए, यदि उपयोगकर्ता इसे एक तरफ या दूसरे तक फैलाता है।मैं UIScrollView ज़ूम बाउंस को कैसे रद्द कर सकता हूं?

अब मैं सम्मानित करना चाहते हैं एक चुटकी छवि 10% न्यूनतम जूम आकार से छोटा और साथ समाप्त हो गया है जब, इस तरह के एक मामले में, ऐसा होने से रोकने के उछाल और एक अलग एनीमेशन कि छवि सिकुड़ता को गति प्रदान करने के लिए " बंद करो। इस तरह, इशारा "बंद करने के लिए चुटकी" एक तरह का हो सकता है। क्या मैं यह करने के लिए लेकर आए हैं, इसके सरलतम पर, यह है: minimumZoomScale की स्थापना

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if (self.zoomBouncing && zoomedToScale/self.minimumZoomScale < 0.90) { 
     // We've let go and were under 90% of the minimum size. 
     self.minimumZoomScale = zoomedToScale; 
     [self shrinkImageToNothing]; 
    } else { 
     // How far have we gone? 
     zoomedToScale = self.zoomScale; 
    } 
} 

यह अच्छा काम करता है इस बिंदु यह पहले से ही उछल रहा है पर सिवाय इसके कि, है, तो कुछ नहीं करता है। इसलिए, बाउंस और सिकुड़ एक ही समय में होती है, जैसा कि आप कल्पना कर सकते हैं बहुत अजीब लग रहा है।

तो मेरा सवाल है: मैं केवल इस विशिष्ट स्थिति में बाउंस को कैसे रोक सकता हूं? कोई UIScrollViewDelegate विधि नहीं है जो मेरे कोड को इशारा खत्म होने के दौरान कुछ करने की अनुमति देता है और जब UIScrollView वापस उछाल का फैसला करता है। मैं कोई भाग्य के साथ अन्य तकनीकों का एक समूह की कोशिश की है, जिनमें शामिल हैं:

  • –viewForZoomingInScrollView: से nil रिटर्निंग जब मेरी 90% जूम सीमा पारित किया गया है। काम नहीं करता है क्योंकि इस विधि को जेश्चर शुरू होता है, ज़ूम के हर बिंदु के लिए नहीं।
  • bouncesZoom-scrollViewDidZoom: में झूठी करने के लिए जब ज़ूम कारक 90% से कम है और यह सही है कि यह 90% से अधिक या उसके बराबर है तो गलत है। जबगलत होता है तो यह आकार 90% से कम होने पर छवि को बुरी तरह हिलाता है।
  • -touchesEnded:withEvent विधि जोड़ना। इसे कभी नहीं बुलाया जाता है।
  • UIScrollView के स्वयं के चुटकी पहचानकर्ता के साथ एक साथ निष्पादित करने के लिए अपना स्वयं का UIPinchGestureRecognizer जोड़ना। काम नहीं करता है क्योंकि UIScrollView के चुटकी इशारे के बाद इसके हैंडलर (और प्रतिनिधि विधियों) को कहा जाता है, जो मेरे इशारे से पहले उछाल का निर्णय भी नहीं दे सकता है। मैंने सभी कोर इशारे को हटाने, मेरा जोड़ने और कोर जेस्चर को वापस जोड़ने की कोशिश की। लेकिन मेरा इशारा था यूआईएसक्रॉल व्यू के बाद बुलाया गया था कि यह उछाल रहा था।

तो मुझे कुछ नुकसान हुआ है। किसी और ने ऐसा कुछ करने की कोशिश की?

उत्तर

3

मुझे लगता है कि इस प्रश्न को लिखने से मुझे समाधान खोजने के लिए सड़क पर जाने में मदद मिली। और सौभाग्य से, यह काफी आसान है! तो, पहला कदम, कोड में मेरे पास minimumZoomScale सेट है, मैंने एक ही मूल्य पर cachedMinZoomScale ivar भी सेट किया है। इसी के साथ, ऐसा नहीं उछाल रही जब पैमाने न्यूनतम के 90% से कम वास्तव में काफी सीधी-सपाट है:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if (self.zoomScale/cachedMinZoomScale < 0.90) { 
     self.minimumZoomScale = self.zoomScale; 
    } else { 
     self.minimumZoomScale = cachedMinZoomScale; 
    } 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { 
    if (self.zoomScale/cachedMinZoomScale < 0.90) { 
     [self shrinkImageToNothing]; 
    } 
} 

असल में, जब स्क्रॉल दृश्य ज़ूम, वर्तमान ज़ूम पैमाने पर -self.minimumZoomScale रखने यदि यह वास्तविक न्यूनतम 90% से कम है, लेकिन इसे किसी भी अन्य ज़ूम पैमाने पर उस वास्तविक न्यूनतम पर सेट करें। फिर, जब ज़ूम खत्म हो जाता है, अगर हम उस 90% थ्रेसहोल्ड के नीचे हैं, तो यह किसी भी चीज़ पर वापस नहीं आ जाएगा क्योंकि यह पहले से ही न्यूनतम आकार होगा, और फिर बस नई एनीमेशन को बंद करने के लिए कॉल करें।

सरल। ओह!

+2

क्या shrinkImageToNothing कर रहा है और जहां cachedMinZoomScale सेट हो रही है? – jjxtra

-2

इस प्रयास करें, [imageScrollview setBounces: NO];

+0

मैंने प्रश्न में वर्णित अन्य कारणों के लिए सक्षम किया है। स्वीकार्य उत्तर मेरी ज़रूरत को संबोधित करता है। – theory

7

आप बस नहीं करने के लिए इस गुण सेट करने के लिए है। (viewDidLoad में पूर्व।)

scrollView.bouncesZoom = नहीं;

संबंधित मुद्दे

 संबंधित मुद्दे