Я столкнулся с проблемой правильного обновления UIScrollView в ответ на изменение минимального масштаба масштабирования.
Scrollview имеет UIImageView в качестве подпредставления, а свойство изображения UIImageView устанавливается в ответ на метод didFinishPickingMediaWithInfo UIPickerView:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage];
[self.imageView setImage:takenImage];
[self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)];
[self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)];
[self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width];
[self.scrollView setMaximumZoomScale:2.0];
[self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES];
[self dismissModalViewControllerAnimated:YES];
}
Это работает правильно при первом добавлении изображения с помощью этого метода. Однако, если этот метод запускается снова - даже для добавления того же изображения, что и в первый раз, - последующее изображение отображается в полном размере в scrollView и не может быть уменьшено - только увеличено.
Я выгрузил contentSize
, zoomScale
, minimumZoomScale
и maximumZoomScale
из scrollView в журнал, и каждый раз они одинаковы. minimumZoomScale
каждый раз рассчитывается правильно.
Это как если бы scrollView перерисовывался с minimumZoomScale
равным 1,0, игнорируя тот факт, что он был явно установлен. Есть ли что-то очевидное, что мне здесь не хватает?