Поделиться через


Использование нескольких портов просмотра в DirectManipulation

При использовании нескольких портов просмотра проверка нажатияопределяет, какие окна просмотра влияют на ввод данных пользователем, принимая расположение экрана контакта и определяя, какой прямоугольник окна просмотра попадает в контакт.

Распространенным сценарием в direct manipulation является размещение одного окна просмотра внутри другого, также известного как вложенные окна просмотра. Если контакт попадает в несколько окон просмотра, порядок вызовов SetContactwndProc окна определяет связь "родитель-потомок" вложенных окон просмотра.

Правило. Дочерний элемент должен вызывать Метод SetContactперед вызовом родительского элемента.

схема, показывающая иерархию проверки попадания

Контакт выходит из окна просмотра. Сначала необходимо вызвать SetContact в оранжевом (дочернем) окне просмотра, а затем в зеленом (родительском) окне просмотра, чтобы установить правильную иерархию.

Нацеливание на правильное окно просмотра

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

При необходимости каждое окно просмотра можно настроить для поддержки определенных взаимодействий.

На основе этих параметров Direct Manipulation определяет, какое окно просмотра обрабатывает входные данные. Окно просмотра с самым дочерним элементом в иерархии проверки попадания имеет первый шанс обработать входные данные. Однако как цепочки, так и родительское повышение могут изменить, какое окно просмотра обрабатывает входные данные.

Построение цепочек

Когда во время манипуляции достигается конец содержимого, direct Manipulation применяет граничный эффект, чтобы указать, что содержимое не может идти дальше. Однако если дочернее окно просмотра связано с родительским окном просмотра, этот эффект подавляется. Вместо этого ближайший предок окна просмотра в иерархии проверки попадания, поддерживающей манипуляцию, обрабатывает входные данные. Если направление манипуляции было изменено таким образом, что предок возвращается в точку, где была активирована цепочка, манипуляция "расцеляется" и управление передается обратно в дочернее окно просмотра.

схема, показывающая связанные манипуляции

Когда пользователь сдвигает дочернее окно просмотра вплоть до края содержимого, манипуляция "связана" с родительским окном просмотра, и пользователь начинает сдвиг родительского содержимого.

Примечание

Оси X и Y цепочки независимо друг от друга, поэтому, если диагональный сдвиг достигает границы x перед границей y, манипуляция перемещает родительский элемент в направлении x, продолжая перемещать дочерний элемент в направлении y. Чтобы включить или отключить цепочки, вызовите API SetChaining в дочернем окне просмотра.

Рельсы

Указание направляющих в конфигурации окна просмотра влияет на способ цепочки входных данных из окна просмотра. В частности, входные данные не могут быть связаны между дочерним окном просмотра с направляющими дочерним окном и его родительским элементом в режиме сдвига без откоса. Для цепочки входных данных при установке направляющих пользователь должен сдвигаться по вертикали или горизонтали и быть заблокирован на направляющих.

изменение масштаба;

Если дочернее окно просмотра вложено в родительский элемент и оба элемента настроены для масштабирования, то при изменении масштаба можно связать между дочерними элементами и родительскими элементами. Однако если манипуляция продолжится, она будет работать только с родительским объектом и не может "отсоединить" к ребенку. Если пользователь связывает масштаб от дочернего к родительскому, direct Manipulation приостанавливает дочерний элемент до тех пор, пока все контакты, связанные с манипуляцией, не будут удалены с экрана. На этом этапе дочерний элемент освобождается от приостановки, и пользователь может сдвигать дочернее окно просмотра.

Нацеливание жестов: продвижение родительского элемента

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

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