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