У меня есть пользовательский UIViewController, на который я добавил UIImageView (на StoryBoard), а затем встроил UIImageView в UIScrollView. Моя программа загружает изображение в изображениеView и масштабирует его для правильной установки. Соответствующего припадке, я имею в виду это:Сброс свойства zoomScale UIScrollView на авторотации
- , если соотношение сторон изображения точно совпадает с той точкой зрения, изображение будет масштабироваться, чтобы точно соответствовать виду, без полос прокрутки
- в противном случае, изображение будет масштабироваться, чтобы точно соответствовать одному измерению, с полосой прокрутки в другом измерении.
В настоящее время я делаю это в представленииWillAppear. Ниже приведен код для этого метода и вспомогательный метод, который вычисляет правильную 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, играя с свойством zoomScale scrollView, но я не могу заставить его работать. Это правильное место для повторного масштабирования? И если да, то как мне это сделать? Благодарю.
Дуэйн
Это мне очень помогло. –