Центрировать UIImageView на экране при уменьшении масштаба

У меня есть UIImageView внутри UIScrollView. Я хочу, чтобы пользователь мог масштабировать и перемещаться по изображению.

Это мой рабочий код:

//img is the UIImageView
//scroller is the UIScrollView

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return img; 
}
- (void)viewDidLoad {
   [super viewDidLoad];
   UIImage *image = [UIImage imageNamed:@"map_screen.png"];
   img = [[UIImageView alloc] initWithImage:image];
   scroller.delegate = self;
   scroller.autoresizesSubviews = YES;
   scroller.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
   scroller.contentSize = img.frame.size;
   scroller.scrollEnabled = YES;
   scroller.directionalLockEnabled = NO;
   scroller.userInteractionEnabled = YES;

   CGSize ivsize = img.frame.size;
   CGSize ssize = scroller.frame.size;

   float scalex = ssize.width / ivsize.width;
   float scaley = ssize.height / ivsize.height;
   scroller.minimumZoomScale = fmin(1.0, fmax(scaley, scalex));
   scroller.zoomScale = fmin(1.0, fmax(scalex, scaley));
   [scroller addSubview:img];
   img.userInteractionEnabled = YES;
}

все работает, но это произошло: минимальный масштаб - это высота экрана. У моего изображения ширина больше, чем высота, поэтому я хочу, чтобы минимальное масштабирование было шириной.

Если я напишу

scroller.minimumZoomScale = fmin(1.0, scalex);

, работает, но когда пользователь уменьшает масштаб, изображение не в центре экрана, но наверху.

Я пробовал что-то вроде этого

CGPoint scrollCenter = [scroller center];
[img setCenter:CGPointMake(scrollCenter.x, scrollCenter.y)];

или

img.center = scroller.center;

, но с этим решением изображение не полностью прокручивается, и если я уменьшаю масштаб, оно снова остается в верхней части экрана, но не полностью видно !

Что я могу сделать, чтобы исправить это?

5
задан JAA 29 April 2011 в 15:53
поделиться