Usando vários visores no DirectManipulation
Ao usar vários visores, o Testede clique determina quais visores são afetados pela entrada do usuário, tomando a localização da tela de um contato e determinando qual retângulo de visor o contato acessa.
Um cenário comum na Manipulação Direta é colocar um visor dentro de outro, também conhecido como visores de aninhamento. Se o contato atingir mais de um visor, a ordem das chamadas SetContact pelo WndProc da janela determinará a relação pai-filho dos visores aninhados.
Regra: o elemento filho deve chamar SetContactantes de chamar o pai.
Um contato aparece em um visor. SetContact deve primeiro ser chamado no visor laranja (filho) e, em seguida, no visor verde (pai) para estabelecer a hierarquia correta.
Direcionando o visor correto
Um contato pode ser associado a qualquer número de visores e cada contato pode ser atribuído a um conjunto diferente de visores.
Cada visor pode ser configurado para dar suporte a interações específicas, conforme necessário.
Com base nessas configurações, a Manipulação Direta identifica qual visor manipula a entrada. O visor mais filho na hierarquia de teste de clique tem a primeira chance de lidar com a entrada. No entanto, o encadeamento e a promoção pai podem alterar qual visor manipula a entrada.
Encadeamento
Quando o final do conteúdo é atingido durante uma manipulação, a Manipulação Direta aplica um efeito de limite para indicar que o conteúdo não pode ir mais longe. No entanto, se um visor filho for encadeado a um visor pai, esse efeito será suprimido. Em vez disso, o visor ancestral mais próximo na hierarquia de teste de clique que dá suporte à manipulação manipulação manipula a entrada. Se a direção da manipulação for invertida de modo que o ancestral retorne ao ponto em que o encadeamento foi disparado, a manipulação "unchains" e o controle serão transferidos de volta para o visor filho.
Quando o usuário exibe o visor filho até a borda do conteúdo, a manipulação "encadeia" para o visor pai e o usuário começa a fazer movimento panorâmico do conteúdo pai.
Observação
Os eixos X e Y encadeiam independentemente uns dos outros, portanto, se uma panela diagonal atingir o limite x antes do limite y, a manipulação moverá o pai na direção x enquanto continua a mover o filho na direção y. Para habilitar ou desabilitar o encadeamento, chame a API SetChaining no visor filho.
Trilhos
Especificar trilhos na configuração de um visor afeta a maneira como a entrada é encadeada do visor. Especificamente, a entrada não pode encadear de um visor filho com grade para seu pai no modo panorâmico "sem corrimão" dos trilhos. Para encadear a entrada quando os trilhos são definidos, o usuário deve ter panorâmica vertical ou horizontalmente e estar bloqueado nos trilhos.
Zoom
Se um visor filho estiver aninhado dentro de um pai e ambos estiverem configurados para zoom, uma manipulação de zoom poderá ser encadeada de filho para pai. No entanto, se a manipulação continuar, ela funcionará apenas no pai e não poderá "remover a cadeia" do filho. Se o usuário encadear um zoom de filho para pai, a Manipulação Direta suspenderá o filho até que todos os contatos associados à manipulação sejam removidos da tela. Neste ponto, o filho é liberado da suspensão e o usuário pode analisar o visor filho.
Direcionamento de gestos: promoção pai
Direcionamento de gestos é o processo pelo qual a Manipulação Direta agrupa contatos e determina qual visor processa a entrada. Promoção pai refere-se a casos em que a entrada é transferida do filho para o pai. Por exemplo, quando um usuário coloca dois contatos e pinça dentro de um visor filho configurado apenas para rolagem, a entrada é promovida para o pai para que o zoom ocorra. A promoção pai ocorre independentemente de o encadeamento estar habilitado no visor filho.
Ao contrário do encadeamento, a promoção pai não é revertida. O visor pai continua processando a entrada de interação até que todos os contatos sejam levantados (os visores filho param de processar a entrada).