Как реализовать мое собственное масштабирование, но при этом иметь доступ к прокрутке UIScrollView?

StackOverflow https://stackoverflow.com/questions/493219

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение 2

Спасибо за твое предложение, Брэд.решение, которое я в конечном итоге использовал, состояло в расширении 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];
}

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top