UIScrollView: вычисление смещения содержимого после масштабирования


Может ли кто-нибудь посоветовать, какая формула используется для вычисления смещения содержимого после увеличения в UIScrollView? Рассмотрим следующий пример: У меня есть UIScrollView с видом содержимого размером (1000, 1000), то если я программно setZoomScale до 2.0 и в методе scrollViewDidEndZooming:withView:atScale буду иметь следующее:

contentSize before zoom = {1000, 1000}
contentOffset before zoom = {0, 0}
scale = 2.000000
contentSize after zoom = {2000, 2000}
contentOffset after zoom = {160, 230}
Мне нужно знать, как вычисляется новое значение contentOffset {160, 230}. Существует ли какая-либо зависимость формулы, которая используется для расчета смещения содержимого в этом случае?

Спасибо

1 5

1 ответ:

Это может иметь или не иметь значения, но обратите внимание, что 160x230-это половина разрешения iPhone, за вычетом строки состояния: 320x460. Попробуйте изменить фрейм UIScrollView или фрейм superview и посмотрите, как это влияет на числа.

EDIT: Если подумать, то вполне логично, что смещение составляет половину размера вида прокрутки, так как оно будет расширяться одинаково в обоих направлениях. Итак, формула будет следующей: contentOffset = (scrollView.frame.size.width/2 * (scaleAfter - scaleBefore), scrollView.frame.size.height/2 * (scaleAfter - scaleBefore)).

Поэтому, если масштаб равен 4,0 f, смещение будет будьте: (320/2 * (4-1), 460/2 * (4-1)) => (480, 690). Попробуйте использовать шкалу 4 и посмотрите, получится ли (480, 690).