2015-09-15 3 views
2

У меня есть UIScrollView, содержащий один UIImageView. Я пытаюсь установить минимальную фабрику прокрутки, так что, когда представление полностью будет уменьшено, все изображение можно увидеть и растянуть по всему экрану.Как правильно рассчитать минимальный коэффициент масштабирования для UIScrollView?

В настоящее время мой код, как представляется, устанавливает минимальный минимум. Вся картина видна, но на правой стороне изображения есть много лишнего места. Когда появляется представление, изображение может быть полностью выведено из поля зрения. Как только выполняется другое масштабирование, большая часть дополнительного пространства уходит, но изображение все еще может быть увеличено слишком мало.

Вот код:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    imageView.image = image! 
    imageView.frame.size = image!.size 
    scrollView.contentSize = imageView.frame.size 

    let scrollViewFrame = scrollView.frame 
    let scaleWidth = scrollViewFrame.size.width/scrollView.contentSize.width 
    let scaleHeight = scrollViewFrame.size.height/scrollView.contentSize.height 
    let minScale = min(scaleWidth, scaleHeight) 
    scrollView.minimumZoomScale = minScale 
    scrollView.maximumZoomScale = 3.0 
    scrollView.zoomToRect(imageView.frame, animated: false) 
} 

Edit: кажется, размеры, меняется до и после увеличения.

Перед увеличением:

Scroll view frame: (0.0, 0.0, 600.0, 600.0) 
Scroll view content size: (1500.0, 1001.0) 
Image view frame: (0.0, 0.0, 1500.0, 1001.0) 

После увеличения:

Scroll view frame: (0.0, 0.0, 600.0, 600.0) 
Scroll view content size: (600.0, 400.4) 
Image view frame: (0.0, 0.0, 600.0, 400.4) 
+0

Ваш код выглядит довольно прочным. Каковы значения для scrollView.frame и scrollView.contentSize? –

+0

'scrollView.frame = (0.0, 0.0, 600.0, 600.0)' и 'scrollView.contentSize = (600.0, 400.4)' – Max

+0

Вместо вычисления на основе contentSize попробуйте использовать imageView.frame.size. Кроме того, если вы намереваетесь увеличить масштаб до 0,67, вы все еще видите белый экран? –

ответ

1

Этот вопрос, что, что ограничения autolayout не были рассчитаны в viewWillAppear. Чтобы исправить это, я переместил логику на viewDidLayoutSubviews.

Смежные вопросы