У меня есть 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;
, но с этим решением изображение не полностью прокручивается, и если я уменьшаю масштаб, оно снова остается в верхней части экрана, но не полностью видно !
Что я могу сделать, чтобы исправить это?