UIScrollView не уважает минимум ZoomScale после изменения подпредставления
Я столкнулся с проблемой правильного обновления UIScrollView в ответ на изменение минимального масштаба.
Вид прокрутки имеет 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, игнорируя тот факт, что он был явно установлен. Есть ли что-то очевидное, что я здесь скучаю?
1 ответ
Кажется, что проблема - не уверен, если это поведение где-то задокументировано - сбрасывает размер контента, в то время как текущий масштаб увеличения установлен на что-то отличное от 1,0.
Исправление простое: сбросьте zoomScale
Свойство до 1,0, прежде чем устанавливать новый размер контента:
// See http://stackru.com/questions/10586577
// first reset before new content size
scroller.zoomScale = 1.0f;
// set new content size
scroller.contentSize = newImage.size;
// ... adjust minimum/maximum zoom scales if needed