আমার UIImageView
ভিতরে একটি রয়েছে UIScrollView
যা আমি জুমিং এবং স্ক্রোলিংয়ের জন্য ব্যবহার করি। স্ক্রোল ভিউয়ের চিত্র / সামগ্রী যদি স্ক্রোল ভিউয়ের চেয়ে বড় হয় তবে সবকিছু ঠিকঠাক কাজ করে। যাইহোক, চিত্রটি যখন স্ক্রোল ভিউয়ের চেয়ে ছোট হয়ে যায়, তখন এটি স্ক্রোল দৃশ্যের উপরের বাম কোণে আটকে যায়। আমি ফটোগুলি অ্যাপ্লিকেশনটির মতো এটিও কেন্দ্রিক রাখতে চাই।
UIScrollView
কেন্দ্রিক বিষয়বস্তু যখন ছোট হয় তখন সে সম্পর্কে কোনও ধারণা বা উদাহরণ ?
আমি আইফোন 3.0 সাথে কাজ করছি।
নিম্নলিখিত কোডটি প্রায় কাজ করে। আমি যদি সর্বনিম্ন জুম স্তরে পৌঁছার পরে এটি চিমটি করে তবে চিত্রটি উপরের বাম কোণে ফিরে আসে।
- (void)loadView {
[super loadView];
// set up main scroll view
imageScrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
[imageScrollView setBackgroundColor:[UIColor blackColor]];
[imageScrollView setDelegate:self];
[imageScrollView setBouncesZoom:YES];
[[self view] addSubview:imageScrollView];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WeCanDoIt.png"]];
[imageView setTag:ZOOM_VIEW_TAG];
[imageScrollView setContentSize:[imageView frame].size];
[imageScrollView addSubview:imageView];
CGSize imageSize = imageView.image.size;
[imageView release];
CGSize maxSize = imageScrollView.frame.size;
CGFloat widthRatio = maxSize.width / imageSize.width;
CGFloat heightRatio = maxSize.height / imageSize.height;
CGFloat initialZoom = (widthRatio > heightRatio) ? heightRatio : widthRatio;
[imageScrollView setMinimumZoomScale:initialZoom];
[imageScrollView setZoomScale:1];
float topInset = (maxSize.height - imageSize.height) / 2.0;
float sideInset = (maxSize.width - imageSize.width) / 2.0;
if (topInset < 0.0) topInset = 0.0;
if (sideInset < 0.0) sideInset = 0.0;
[imageScrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [imageScrollView viewWithTag:ZOOM_VIEW_TAG];
}
/************************************** NOTE **************************************/
/* The following delegate method works around a known bug in zoomToRect:animated: */
/* In the next release after 3.0 this workaround will no longer be necessary */
/**********************************************************************************/
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
[scrollView setZoomScale:scale+0.01 animated:NO];
[scrollView setZoomScale:scale animated:NO];
// END Bug workaround
CGSize maxSize = imageScrollView.frame.size;
CGSize viewSize = view.frame.size;
float topInset = (maxSize.height - viewSize.height) / 2.0;
float sideInset = (maxSize.width - viewSize.width) / 2.0;
if (topInset < 0.0) topInset = 0.0;
if (sideInset < 0.0) sideInset = 0.0;
[imageScrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
}