2012-02-21 16 views
5

मेरे पास एक यूस्कोलव्यू है और इसके अंदर एक UIuiviewview है। मैं चाहता हूं कि यह छवि से ज़ूम इन करने में सक्षम हो क्योंकि यह एक बड़ी छवि है। स्क्रॉलव्यू को केवल क्षैतिज रूप से लंबवत स्क्रॉल करने की आवश्यकता नहीं है।uiscrollview ज़ूम इन और ज़ूम आउट ठीक से काम नहीं करता है

जूमिंग प्रभाव जोड़ने से पहले मैं निम्नलिखित कोड था और के रूप में मैं चाहता था यह काम किया,

-(void)viewDidLoad 
{ 
[scrollView setScrollEnabled:YES]; 
[scrollView setContentSize:CGSizeMake(320, 1690)]; 
} 

तो मैं कुछ शोध किया और में चुटकी ज़ूम सक्षम करने के लिए निम्न कोड के साथ समाप्त हो गया और बाहर,

-(void)viewDidLoad 
{ 
scrollView.scrollEnabled = YES; 

[scrollView setContentSize:CGSizeMake(320, 1690)]; 
scrollView.delegate = self; 
// scrollView.contentSize = instImage.frame.size; 
scrollView.minimumZoomScale = scrollView.frame.size.width/instImage.frame.size.width; 
scrollView.maximumZoomScale = 2.0; 
[scrollView setZoomScale:scrollView.minimumZoomScale]; 
[[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; 

} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

return instImage; 
} 


- (CGRect)centeredFrameForScrollView:(UIScrollView *)scroll andUIView:(UIView *)rView { 

CGSize boundsSize = scroll.bounds.size; 
CGRect frameToCenter = rView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) { 

    frameToCenter.origin.x = ((boundsSize.width - frameToCenter.size.width)/2); 

}else { 

    frameToCenter.origin.x = 0; 
} 

return frameToCenter; 
} 


- (void)scrollViewDidZoom:(UIScrollView *)scrollV { 

instImage.frame = [self centeredFrameForScrollView:scrollV andUIView:instImage];; 
} 

अब मैं निम्नलिखित समस्या है और मैं समझ नहीं क्या गलत है,

  1. जब दृश्य किसी भी चुटकी से पहले लोड किया जाता है तो स्क्रॉलव्यू छवि के अंत तक सभी तरह से स्क्रॉल नहीं करता है।

  2. जब ज़ूम इन करने के लिए चुराया जाता है, तो यह छवि को बाएं और दाएं और नीचे और नीचे स्क्रॉल करता है, लेकिन फिर भी यह छवि के अंत तक सभी तरह से नीचे स्क्रॉल नहीं करता है, लेकिन यह मूल रूप से जो भी करता है उससे कहीं अधिक द बिगिनिंग।

  3. जब मैं ज़ूम आउट करता हूं, तो पूरी चीज बंद हो जाती है। आप ज़ूम इन या आउट नहीं कर सकते हैं, यह अब भी स्क्रॉल नहीं करता है। पूरी तरह से बंद कर दिया।

मैंने कुछ शोध किया और निम्नलिखित पोस्ट प्राप्त की। https://stackoverflow.com/a/6384834/1103257

लेकिन मुझे नहीं पता कि मुझे NSDefaultRunLoopMode कहां मिलेगा या यहां तक ​​कि यह पता लगाने के लिए कि यह कैसे हल कर सकता है या नहीं।

उत्तर

5

मुझे अंततः यह मिला। यह समाधान पूरी तरह से काम करता है!

अपने ज फ़ाइल

@interface scrollViewController : UIViewController <UIScrollViewDelegate>{ 

     float oldScale; 

     IBOutlet UIScrollView *scrollView; 
     IBOutlet UIImageView *image; 
} 

@end 

और बस UIImageView तस्वीर है कि आप अंदर और बाहर ज़ूम करना चाहते हैं और अपने scrollview के अंदर है कि करने के लिए छवि कनेक्ट में। फिर स्क्रॉलव्यू को अपने इंटरफ़ेस पर अपने यूस्कोलव्यू से कनेक्ट करें।

अपने .m फ़ाइल में

@implementation scrollViewController 


-(void)viewDidLoad 
{ 
[super viewDidLoad]; 

scrollView.scrollEnabled = YES; 
scrollView.minimumZoomScale=1.0; 
scrollView.maximumZoomScale=4.0; 
[scrollView setContentSize:CGSizeMake(320, 1700)]; 
scrollView.delegate=self; 

} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return image; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollV withView:(UIView *)view atScale:(float)scale 
{ 
    [scrollView setContentSize:CGSizeMake(scale*320, scale*1700)]; 
} 

    @end 

आशा है कि यह मदद करता है।

+0

धन्यवाद @Mona। मुझे उपर्युक्त मुद्दे का भी सामना करना पड़ा। इससे मेरा काम बनता है। :) – iKT

1

यहाँ कैसे मैं viewDidLoad में एक बड़ी छवि के चारों ओर स्क्रॉल करने के लिए एक स्क्रॉल दृश्य को लागू है

UIImage *img = [UIImage imageNamed:@"image_name.png"]; 
largeImageView = [[UIImageView alloc] initWithImage:img]; 

[self.view insertSubview: largeImageView atIndex:0]; 
[(UIScrollView *)self.view setContentSize:[img size]]; 
[(UIScrollView *)self.view setMaximumZoomScale:2.2]; 
[(UIScrollView *)self.view setMinimumZoomScale:0.3]; 
[(UIScrollView *)self.view setCanCancelContentTouches:YES]; 
[(UIScrollView *)self.view setBounces:YES]; 
[mapImageView setUserInteractionEnabled:YES]; 

तो मैं भी viewForZoomingInScrollView विधि है:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return largeImageView; 
} 

आप scrollViewDidZoom समारोह इस बिंदु पर अनावश्यक है । जब मैं पूरी छवि दिखाई दे रहा हूं, तो छवि को केंद्रित रखने के लिए कुछ ऐसा ही लागू होता है, लेकिन अभी मैं इसके बारे में चिंता नहीं करता अगर मैं आप थे।

+0

अपेक्षित काम नहीं किया – Mona

+1

बस यह सुनिश्चित करने के लिए, क्या आप आईओएस 5 में काम कर रहे हैं? और आपका व्यू कंट्रोलर का प्रतिनिधि है? – atreat

+0

हाँ दोनों प्रश्न – Mona

1

एक ही मुद्दा है, लेकिन एक सरल समाधान का हो गया है, बस उपयोगकर्ता संपर्क करने के लिए छवि दृश्य सक्षम सेट:

[self.imageView setUserInteractionEnabled:YES]; 
0

मेरे लिए मुद्दा था मैं ऑटो लेआउट का उपयोग किया गया था और इसके लिए जूम प्रतिनिधि की स्थापना नहीं की गई थी UIScrollView। मैं एक कस्टम UIViewController का उपयोग कर रहा था जो एक UIScrollViewDelegate भी था।

func viewDidLoad() { scrollView.delegate = self } 

या स्टोरीबोर्ड द्वारा UIScrolView का चयन करें और कनेक्शन निरीक्षक में प्रतिनिधि खींचें प्रतिनिधि सेट में UIViewController को इंगित करने के: मैं या तो आप कोड में प्रतिनिधि सेट कर सकते हैं पाया।

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