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
Другие вопросы по тегам