के साथ ज़ूम आउट करने पर कूदती है, मैं अपने UIScrollView नमूना के साथ सहायता चाहता हूं।सामग्री UIScrollView
मैंने एक साधारण प्रोग्राम बनाया जो सामग्री को स्क्रॉल और ज़ूम करता है (UIImageView
)। यह ठीक काम करता है, सिवाय इसके कि जब मैं ज़ूम आउट करने का प्रयास करता हूं तो सामग्री अक्सर दाएं-तल पर गायब हो जाती है। लेकिन चूंकि मैंने minimumZoomScale
से 1.0f सेट किया है, इसलिए यह वास्तव में ज़ूम आउट नहीं कर रहा है, केवल सामग्री दृश्य से बाहर निकल रही है। और और भी अजीब बात यह है कि मैं इसके बाद स्क्रॉल नहीं कर सकता। स्पष्ट रूप से सामग्री का आकार भी गड़बड़ हो गया है।
सेटअप मैं अपने नमूना कोड में नीचे आकृति में के रूप में है।
जब मैं (कोशिश कर) बाहर ज़ूम करने के बाद स्थिति की जाँच की, मैं दो गलत बातें पाया।
_scrollView.contentSize
480x360, जो नहीं होना चाहिए से छोटी 1000x1000_scrollView.bounds
किसी भी तरह शीर्ष करने के लिए कूद गया है (यानी,_scrollView.bounds.origin.y
हमेशा 0 है)
दो आइटम के साथ सामना करने के लिए ऊपर, मैंने अपने UIScrollViewDelegate में निम्न कोड जोड़ा और अब यह ठीक काम करता है।
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
if(scrollView == _scrollView && view == _contentView)
{
// Setting ivars for scrollViewDidZoom
_contentOffsetBeforeZoom = _scrollView.contentOffset;
_scrollViewBoundsBeforeZoom = _scrollView.bounds;
}
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
if(scrollView == _scrollView)
{
// If you zoom out, there are cases where ScrollView content size becomes smaller than original,
// even though minimum zoom scale = 1. In that case, it will mess with the contentOffset as well.
if(_scrollView.contentSize.width < CONTENT_WIDTH || _scrollView.contentSize.height < CONTENT_HEIGHT)
{
_scrollView.contentSize = CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT);
_scrollView.contentOffset = _contentOffsetBeforeZoom;
}
// If you zoom out, there are cases where ScrollView bounds goes outsize of contentSize rectangle.
if(_scrollView.bounds.origin.x + _scrollView.bounds.size.width > _scrollView.contentSize.width ||
_scrollView.bounds.origin.y + _scrollView.bounds.size.height > _scrollView.contentSize.height)
{
_scrollView.bounds = _scrollViewBoundsBeforeZoom;
}
}
}
हालांकि, यह इस करने के लिए नीचे आने के लिए की जरूरत है? यह एक बहुत ही सरल अनुक्रम है, और यह विश्वास करना मुश्किल है कि ऐप्पल को इस तरह के प्रयास करने की आवश्यकता है। तो, मेरी शर्त है कि मुझे यहां कुछ याद आ रहा है ...
मेरा मूल कोड निम्नलिखित है। कृपया मुझे यह जानने में सहायता करें कि मैं क्या गलत कर रहा हूं (या कुछ याद आ रहा है)!
#define CONTENT_WIDTH 1000
#define CONTENT_HEIGHT 1000
>>>> Snip >>>>
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
_scrollView.contentSize = CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT);
_scrollView.backgroundColor = [UIColor blueColor];
_scrollView.maximumZoomScale = 8.0f;
_scrollView.minimumZoomScale = 1.0f;
_scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
_scrollView.scrollEnabled = YES;
_scrollView.delegate = self;
[self.view addSubview:_scrollView];
_contentView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sample.jpg"]]; // sample.jpg is 480x360
CGPoint center = (CGPoint){_scrollView.contentSize.width/2, _scrollView.contentSize.height/2};
_contentView.center = center;
[_scrollView addSubview:_contentView];
_scrollView.contentOffset = (CGPoint) {center.x - _scrollView.bounds.size.width/2, center.y - _scrollView.bounds.size.height/2};
}
- (UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView
{
if(scrollView == _scrollView)
{
return _contentView;
}
return nil;
}
क्या आपने '_contentView को सेट करने का प्रयास किया है।autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; '? – Adam
सुझाव के लिए धन्यवाद। लेकिन नहीं, यह स्थिति में बदलाव नहीं करता है ... – barley
क्या मैं पूछ सकता हूं कि आपकी 'सामग्री आकार' 1000x1000 क्यों है? – tia