У меня есть пользовательский UIViewController, в который я добавил UIImageView (на StoryBoard), а затем встроил UIImageView в UIScrollView. Моя программа загружает изображение в imageView и масштабирует его для правильного размещения. Под правильной посадкой я имею в виду следующее:
- , если соотношение сторон изображения точно совпадает с соотношением сторон вида, изображение будет масштабировано для точного соответствия виду без полос прокрутки
- в противном случае изображение будет масштабировано для точного размещения в одном измерении с полосой прокрутки в другом измерении.
В настоящее время я делаю это в viewWillAppear. Ниже приведен мой код для этого метода и вспомогательный метод, который вычисляет правильный zoomScale:
-(float) findZoomScale {
float widthRatio = self.view.bounds.size.width / self.imageView.image.size.width;
float heightRatio = self.view.bounds.size.height / self.imageView.image.size.height;
float ratio;
if (widthRatio > heightRatio) ratio = widthRatio;
else ratio = heightRatio;
return ratio;
}
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
self.imageView.image = self.image;
self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height);
self.scrollView.contentSize = self.imageView.image.size;
self.scrollView.zoomScale = [self findZoomScale];
[self.scrollView flashScrollIndicators];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:self.photoURL]];
self.imageView.image = self.image;
self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width,
self.imageView.image.size.height);
self.scrollView.delegate = self;
self.scrollView.zoomScale = 1.0;
self.navigationItem.title = self.photoTitle;
self.scrollView.autoresizesSubviews = YES;
self.scrollView.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
}
Этот код работает так, как я и предполагал для начальной загрузки изображения, независимо от того, находится ли iPhone в альбомной или книжной ориентации. Но когда я поворачиваю iPhone с уже загруженным изображением, оно неправильно масштабируется. Я попытался выполнить масштабирование в didRotateFromInterfaceOrientation, играя со свойством scrollView zoomScale, но не могу заставить его работать. Это правильное место для масштабирования? И если да, то как мне это сделать? Спасибо.
Дуэйн