В моем приложении у меня большая площадь (≈5000x5000pts), и я должен разрешить пользователю видеть (+ масштабировать, прокручивать) только свою определенную прямоугольную подобласть со сторонами, не обязательно параллельными сторонам области.Отобразить субрегион UIView в UIScrollView
Каков наилучший способ для этого?
Что я делаю сейчас:
- Есть большой
UIView
содержащий всю область (поэтому его кадр 5000x5000), как подвид UIScrollView в. Рассчитать и применить
CGAffineTransform
- повернуть мой взгляд, чтобы сделать область стороны параллельно оси координат и положение требуемой области происхождения: размер содержимогоcontentView.transform = CGAffineTransformMake(cos(angle), sin(angle), -sin(angle), cos(angle), -requiredRect.origin.x, -requiredRect.origin.y);
Set Scrollview, чтобы требуемое значение.
scrollView.contentSize = CGSizeMake(someWidth, someHeight);
Он работает таким образом, но вы некоторые (не все перечисленные на самом деле) проблемы, связанные с ним:
- Когда я просигналить прокрутки просмотреть его сброс размера контента к размеру моего большого вида области (5000x5000, умноженного на коэффициент масштабирования). Я снова установил его в методе делегата
scrollViewDidEndZooming
, но все равно выглядит странно. - Zooming, кажется, применяется с неправильной точки привязки и выглядит не красиво (вид «перескакивает» на другую позицию после того, как масштабирование в законченный)
Можете ли вы предложить другой подход к проблеме или указать, что может быть сделано для улучшить мой текущий? Похоже, что UIScrollView
плохо себя ведет, когда пользовательские преобразования применяются к его представлениям контента ...