2012-01-10 2 views
1

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

В проекте iPad у меня есть UIScrollView (scrollView), который содержит дочерний UIView (insetView). Мой insetView возвращается из метода scrollViewDidEndZooming и используется исключительно для масштабирования его дочерних представлений.

insetView начинается с меньшего и расположенного по центру на scrollView. Поскольку пользователь зажимает Zoom, insetView может либо расти в два раза, либо в оригинальном размере, либо уменьшить до половины его первоначального размера.

Все это прекрасно работает, но есть одно небольшое раздражение, которое я хочу облегчить. Если я зажимаю, чтобы увеличить, insetView сжимается, но началом масштабирования является верхний левый угол insetView. Другими словами, insetView будет расти и сжиматься с его верхней левой точкой, зафиксированной в окне scrollView.

То, что я хотел бы сделать, это insetView увеличивать и уменьшать на это центр, и остаются неподвижными в центре scrollView, пока не подобран больше scrollView области. В этот момент я хотел бы, чтобы начало увеличения было серединой пинча или, по крайней мере, в центре текущей части insetView, которая в настоящее время видна?

Как это можно сделать?

ответ

2

Вы хотите сделать что-то вроде этого в методе scrollViewDidZoom: делегата:

CGSize boundsSize = scrollView.bounds.size; 
CGRect frameToCenter = insetView.frame; 

if (frameToCenter.size.width < boundsSize.width) { 
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2.0f; 
} else { 
    frameToCenter.origin.x = 0.0f; 
} 

if (frameToCenter.size.height < boundsSize.height) { 
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2.0f; 
} else { 
    frameToCenter.origin.y = 0.0f; 
} 

insetView.frame = frameToCenter; 
+0

Если мой 'scrollView' не тот же размер, как мой дисплей, должен не' CGSize boundsSize = self.bounds.size ; 'line read 'CGSize boundsSize = scrollView.bounds.size;'? – RLH

+0

Извинения, да, это должно. Я скопировал код из моего проекта и отредактировал его, но не смог правильно отредактировать этот бит. Хорошо подмечено. Работает ли это для вас? – mattjgalloway

+0

Да! Спасибо! На самом деле у меня это было в моем коде за один раз, за ​​исключением операторов 'else'. Это была недостающая часть того, что делал мой код, и ошибка, которая появилась без этого кода, была более раздражающей, чем поведение, описанное выше. Я отмечаю это как ответ, но у меня есть еще один вопрос. Мой 'insetView' по-прежнему оставался фиксированным в' scrollView' в верхнем левом углу, в то время как сжимался. Дисплей повторно центрируется, когда я отпускаю пинч. Есть ли способ сделать это, в то время как масштабирование влияет, или мне просто нужно жить с ним? Это работает, но я придирчивый и, как приложение, польский! :) – RLH