2014-09-19 7 views
7

मेरा पॉइंट उन फ़ोटो का उपयोग करने वाले कई ऐप्स के व्यवहार की प्रतिलिपि बनाना है, जहां UIScrollViewUIImageView के साथ प्रस्तुत किया जा रहा है, यह छवि को छोटा होने पर भी स्क्रीन के आकार में छवि फिट बैठता है।स्क्रीन को फिट करने के लिए UIScrollView ज़ूम स्केल सेट करना

मुझे यकीन है कि यह UIImageView फ्रेम के साथ नहीं किया जाना चाहिए, लेकिन UIScrollView द्वारा छेड़छाड़ की गई लेकिन कैसे ...?


मेरी कोड में मैं एक विधि updateZoom कहा जाता है जो minimumZoomScale मूल्य की गणना करता है और यह भी zoomScale संपत्ति को यह मूल्य प्रदान करती है। मुझे लगता है कि गणित करने के लिए यह सही जगह है और zoomScale मैन्युअल रूप से गणना करें।

- (void)updateZoom { 
    float minZoom = MIN(self.view.bounds.size.width/self.imageView.image.size.width, self.view.bounds.size.height/self.imageView.image.size.height); 

    if (minZoom > 1) { 
     minZoom = 1; 
    } 

    self.scrollView.minimumZoomScale = minZoom; 
    self.scrollView.zoomScale = minZoom; 
} 

मुझे आशा है कि कोई मुझे पर एक हिट देना होगा zoomScale सेट करने का तरीका UIScrollView सीमा फिट करने के लिए:

इस विधि है। कोड से ऊपर self.scrollView.minimumZoomScale = self.scrollView.frame.size.width/ self.imageView.frame.size.width;

scrollview चौड़ाई में अपनी छवि फिट होगा:

उत्तर

2

ज़ूम जो scrollview में छवि का आकार इस का उपयोग करते हुए scrollview के लिए minimumZoom सेट फिट बैठता है सेट करने के लिए।

5

समाधान काफी आसान था ... इस कोड (ओपी से विधि का संशोधित संस्करण) की जाँच करें:

- (void)updateZoom { 
    float zoomScale = MIN(self.view.bounds.size.width/self.imageView.image.size.width, self.view.bounds.size.height/self.imageView.image.size.height); 

    if (zoomScale > 1) { 
     self.scrollView.minimumZoomScale = 1; 
    } 

    self.scrollView.minimumZoomScale = zoomScale; 
    self.scrollView.zoomScale = zoomScale; 
} 

मुझे लगता है कि के रूप में कोड सीधे आगे है समझाने के लिए कोई बात नहीं है।

10

काम के ऊपर समाधान, लेकिन मैं समझने के लिए संघर्ष कर रहा था क्यों। मैं इन दो लेखों को साझा करना चाहता हूं जिन्हें मैंने mininumZoomScale को सही तरीके से स्थापित करने और आईओएस 8/एक्सकोड 6 के साथ काम करने में बहुत मददगार पाया।

सबसे पहले, आईओएस 8 पर काम करने के लिए स्क्रॉल व्यू प्राप्त करने की मांग है कि आप अपनी बाधाओं को सही ढंग से सेट करें शुरू से। अन्य पोस्टर ने सिफारिश की है, और मैं सहमत हूं कि आपके स्क्रोल व्यू में केवल एक ही सामग्री दृश्य होना चाहिए। एक सामग्री दृश्य में अपने सभी अन्य विचारों को एम्बेड करने के लिए ठीक है, लेकिन आप अपनी स्क्रॉल व्यू बाधाओं को छोटे विचारों के समूह में सेट नहीं करना चाहते हैं।

सामग्री दृश्य से स्क्रॉल दृश्य में अपने शीर्ष, अग्रणी, पीछे और नीचे की बाधाओं को कनेक्ट करें (मेरे मामले में यह एक UIImageView है) निरंतर 0 के साथ। यह आपकी सामग्री दृश्य के किनारों को स्क्रॉल व्यू पर सेट करता है।

अगला, स्क्रॉल दृश्य में समान चौड़ाई और समान ऊंचाई बाधाओं का उपयोग करके सामग्री दृश्य का आकार सेट करें। आप सामग्री दृश्य में निश्चित चौड़ाई और निश्चित ऊंचाई का उपयोग नहीं कर सकते हैं क्योंकि ज़ूमिंग काम नहीं करेगी, न ही आप स्वयं आकार का प्रबंधन कर सकते हैं। इन बाधाओं के बिना, आईओएस 8 आपके पास मौका मिलने से पहले (0,0) आकार को सेट करता है जिसके परिणामस्वरूप कुछ अजीब कलाकृतियां होती हैं। इन बाधाओं के साथ, अभिविन्यास विधि में अपनी अद्यतन ज़ूम विधि को कॉल करें और आप अच्छे हैं। आईओएस 7 में इसे didRotateFromInterfaceOrientation में कॉल करें। आईओएस 8 में इसे व्यूविल्ल ट्रांजिशनटोज़ीज़ से कॉल करें। आपको नए आकार में पास करने के लिए कोड को अपडेट करना होगा।

नताशा के लिए बहुत-बहुत धन्यवाद बाधा समाधान के लिए रोबोट: http://natashatherobot.com/ios-autolayout-scrollview/

जब आप अपने न्यूनतम tweak करने के लिए अपने updateZoom विधि कॉल, आप भी जांच होनी चाहिए कि क्या आपके वर्तमान zoomScale है < अपने minimumZoomScale और इसे रीसेट अगर यह होता है। आपको ज़ूमस्केल को अन्यथा रीसेट नहीं करना चाहिए क्योंकि यह अभिविन्यास परिवर्तन के दौरान आपके उपयोगकर्ता से एक और प्रश्नोत्तरी दिखता है।

बाकी के लिए और के रूप में क्यों गणित काम करता है, जो कोनवे objc.io पर यह सब बाहर इस शानदार लेख में सीमा पर फ्रेम बनाम UIScrollViews के साथ रखी: http://www.objc.io/issue-3/scroll-view.html

दोनों के लिए धन्यवाद और पोस्टर के ऊपर ।

-(void)updateZoom { 
    self.scrollView.minimumZoomScale = MIN(self.scrollView.bounds.size.width/self.imageView.image.size.width, self.scrollView.bounds.size.height/self.imageView.image.size.height); 

    if (self.scrollView.zoomScale < self.scrollView.minimumZoomScale) 
     self.scrollView.zoomScale = self.scrollView.minimumZoomScale; 
} 
0

और यहाँ स्विफ्ट 3 संस्करण

var minZoom = min(self.view.bounds.size.width/theImage!.size.width, self.view.bounds.size.height/theImage!.size.height); 

     if (minZoom > 1.0) { 
      minZoom = 1.0; 
     } 

     self.scrollImg.minimumZoomScale = minZoom; 
     self.scrollImg.zoomScale = minZoom; 
1

स्विफ्ट 3

धन्यवाद इस (मैं छवि के लिए "सीमा" जोड़ने के लिए आवश्यक) मेरे लिए काम किया @chewy के लिए है:

func setZoomScale() { 

    var minZoom = min(self.view.bounds.size.width/imageView!.bounds.size.width, self.view.bounds.size.height/imageView!.bounds.size.height); 

    if (minZoom > 1.0) { 
     minZoom = 1.0; 
    } 

    scrollView.minimumZoomScale = minZoom; 
    scrollView.zoomScale = minZoom; 

} 

फिर सेटज़ूमस्केल() में कॉल करें "func viewWil ओवरराइड करें lLayoutSubviews() "

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