Как реализовать собственное масштабирование, но при этом иметь доступ к прокрутке UIScrollView? - PullRequest
0 голосов
/ 29 января 2009

Я хотел бы использовать функцию прокрутки / панорамирования UIScrollView, но я бы хотел сам обрабатывать все масштабирование и масштабирование. Мой текущий план состоит в том, чтобы иметь viewController, который владеет UIView (я назову это view1) с несколькими UIViews и UIScrollViews как дочерние.

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

(Для любопытных, приложение рисует несколько тепловых карт, каждая со своим собственным набором осей. При масштабировании или прокрутке оси должны обновляться, чтобы правильно маркировать диапазоны, представленные в области данных (представление прокрутки). Причина, по которой я не могу использовать масштабируемое по умолчанию масштабирование изображения-контекста, которое поставляется бесплатно с scrollView, заключается в том, что ЛЮБОЕ, нарисованное в контексте, масштабируется (включая такие вещи, как опорные линии). настроить диапазон видимых данных.)

Ответы [ 2 ]

4 голосов
/ 05 февраля 2009

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

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

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

0 голосов
/ 13 февраля 2009

Спасибо за предложение, брэд. решение, которое я в итоге использовал, заключалось в расширении UIScrollView и переопределении метода touchesMoved: withEvent: с помощью этого:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}

где "content" - указатель на подпредставление содержимого моего прокрутки. Я должен был сделать это таким образом, потому что мой контент должен масштабироваться до точки (то есть точки в пространстве данных под пальцами пользователя не должны меняться). Информация, отправляемая в setTransform: может сообщить мне только размер фрейма контента, но мне также нужно смещение в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...