У меня есть пользовательский подкласс UIViewController, управляющий UISCrollView, содержащий UIImageView, настроенный так:
UIViewController
+ UIScrollView (delegate: UIViewController, viewForZoomingInView: UIImageView)
+ UIImageView
Я могу использовать UIScrollView для увеличения моего изображения и перемещения по нему - но если я сделаю так, чтобы центр обзора не был центром изображения, а затем полностью уменьшил масштаб, мое изображение отключилось центр; более того, поскольку я нахожусь в минимальном масштабе увеличения в этой точке, я не могу перемещаться, чтобы перецентрировать мое изображение.
Я ожидал, что при уменьшении UIScrollView перецентрирует область contentSize под ее границами, чтобы вы никогда не видели за пределами представления содержимого (точнее, размера представления содержимого плюс contentInset). Я ошибаюсь в этом предположении?
Если так, что я должен сделать, чтобы обеспечить такое поведение?
Вот мой код:
- (void)viewDidLoad
{
[super viewDidLoad];
imageView.image = image;
[imageView sizeToFit];
float minimumScale = [imageScrollView frame].size.width / [imageView frame].size.width;
imageScrollView.contentSize = [imageView frame].size;
imageScrollView.maximumZoomScale = 2.0;
imageScrollView.minimumZoomScale = minimumScale;
imageScrollView.zoomScale = imageScrollView.minimumZoomScale;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return imageView;
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
// nothing
}
РЕДАКТИРОВАТЬ: Решение!
Вы должны установить clipsToBounds = YES
в UIScrollView, чтобы получить желаемое поведение. Сначала я этого не обнаружил, потому что это свойство UIView, а не UIScrollView напрямую.