2011-09-05 12 views
5

मेरे UIScrollView एक बड़ी सामग्री के साथ आबादी वाले और फिर "setZoomScale: एनिमेटेड" के साथ ज़ूम इन करता है, ऐसी है कि वह scrollview फ्रेम में फिट बैठता है। दृश्य ठीक से ज़ूम आउट होता है, और स्क्रॉलव्यू में ठीक से स्थित है। हालांकि, उपयोगकर्ता सामग्री के बाहर स्क्रॉल करने में सक्षम है (स्क्रॉलव्यू पृष्ठभूमि रंग शो)। ऐसा लगता है कि वह मूल सामग्री आकार तक स्क्रॉल कर सकता है (जैसे कि सामग्री ज़ूम आउट नहीं की गई थी)। उपयोगकर्ता आश्चर्यजनक रूप से पर्याप्त है, उपयोगकर्ता मैन्युअल रूप से पहली बार ज़ूम करता है, सबकुछ ठीक काम करता है, और स्क्रॉलव्यू सामग्री आकार में फिर से बाध्य होता है।UIScrollView स्क्रॉल बहुत दूर प्रारंभिक ज़ूम के बाद

मैंने वेब की खोज की है, और ऐप्पल दस्तावेज़ों और उदाहरणों के माध्यम से चले गए हैं, लेकिन किसी को भी एक ही समस्या नहीं मिल सका। ऐप्पल उदाहरण एक ही चीज़ दिखाते हैं जैसा मैं करता हूं।

मेरी सामग्री UIView से ली गई है कि एक कस्टम दृश्य है, और जिसका CALayer (एप्पल उदाहरण के रूप में) एक CATiledLayer ने ले ली है। ड्राइंग मैं ड्रॉलेयर में खुद करता हूं: इनकॉन्टेक्स्ट:।

यहाँ MyScrollViewController से एक कोड का टुकड़ा है:

- (void)loadView { 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame]; 
    scrollView.maximumZoomScale=1.0; 
    scrollView.delegate = self; 

    ... setup theContentView ... 

    scrollView.contentSize = theContentView.bounds.size; 
    scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20); 
    [scrollView addSubview:theContentView]; 
    self.view = scrollView; 

    double zoomScale = 0.5; // hardcoded for testing 
    [scrollView setZoomScale:zoomScale animated:NO]; 
NSLog(@"zoomscale=%g contentview=%@ contentsize=%@", zoomScale, NSStringFromCGSize(theContentView.bounds.size), NSStringFromCGSize(scrollView.contentSize)); 

    [scrollView release]; 
} 

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

NSLog बयान एक सही तरीके से सेट contentSize पता चलता है और zoomscale ...

आशा वहाँ कुछ स्पष्ट है कि मुझे याद आ रही है ...

+0

किसी को भी इस के लिए एक समाधान था? मुझे एक ही समस्या है, बस दूसरी तरफ दौर। मेरा स्क्रॉलव्यू निहित छवि को प्रदर्शित करने के लिए छोटा है (मैं छवि के नीचे स्क्रॉल नहीं कर सकता) लेकिन सब कुछ ठीक होने के बाद ज़ूम करने के बाद। – Maverick1st

+1

मैंने अगले रनलोप (सीधे लोडव्यू से सीधे) पर ज़ूमस्केल सेट करना समाप्त कर दिया, जिसने काम किया: "[स्वयं प्रदर्शन चयनकर्ता: @ चयनकर्ता (प्रारंभिक ज़ूम) ऑब्जेक्ट: nil afterDelay: 0];"। लेकिन मैं कई अन्य सामान भी लिखता हूं, इसलिए मुझे यकीन नहीं है कि यह एकमात्र चीज है या नहीं। – fishinear

+0

मुझे अंत में एक ही विचार था और यह पूरी तरह से काम करता है। Zidscale को देखते समय आपको प्राप्त एक बोनस DidAppear यह है कि उपयोगकर्ता एनिमेटेड ज़ूम देखता है और इस प्रकार जानता है कि वह जिस छवि को देखता है वह ज़ूम करने योग्य है :) – Maverick1st

उत्तर

3

मैं zoomScale (सीधे loadView से बजाय) है, जो काम किया अगले runloop पर स्थापित करने समाप्त हो गया:

- (void) loadView { 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame]; 
    scrollView.maximumZoomScale=1.0; 
    scrollView.delegate = self; 

    ... setup theContentView ... 

    scrollView.contentSize = theContentView.bounds.size; 
    scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20); 
    [scrollView addSubview:theContentView]; 
    self.view = scrollView; 

    // set the zoom level on the next runloop invocation 
    [self performSelector:@selector(initialZoom) withObject:nil afterDelay:0]; 

    [scrollView release]; 
} 

- (void) initialZoom { 
    double zoomScale = 0.5; // hardcoded for testing 
    UIScrollView *scrollView = (UIScrollView *) self.view; 
    [scrollView setZoomScale:zoomScale animated:NO]; 
} 

एक और संभावना है, Maverick1st ने सुझाव दिया, viewDidAppear, बजाय LoadView से zoomscale स्थापित करने के लिए है । उस दृष्टिकोण में अतिरिक्त लाभ है कि यह ज़ूमिंग की एनीमेशन दिखाता है, जो उपयोगकर्ता को इंगित करता है कि दृश्य ज़ूम किए गए राज्य में शुरू होता है।

- (void) viewDidAppear { 
    double zoomScale = 0.5; // hardcoded for testing 
    UIScrollView *scrollView = (UIScrollView *) self.view; 
    [scrollView setZoomScale:zoomScale animated:YES]; 
} 
1

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

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