Como imitar a visualização do fluxo de trabalho do Automator?
-
24-09-2019 - |
Pergunta
Estou começando a desenvolver meu primeiro aplicativo de cacau completo contendo uma visão que eu gostaria de me comportar (e procurar) semelhante ao do Automator AMWorkflowView
.
Os recursos básicos que eu gostaria de alcançar:
- Posicionamento de subviews
- Exibição de subviews em estados expandidos / colapsados
- Seleção múltipla
- Arraste e solte
Para me acostumar com o cacau, comecei com um costume NSView
que serviu principalmente como contêiner para as subviews personalizadas e lidou com seu posicionamento e seleção múltipla. As subviews também são subclasses de NSView
, e contém uma quantidade variável de visualizações, como botões, rótulos e menus pop -up e, portanto, pode ter alturas diferentes. Isso funcionou muito bem, mas antes de prosseguir, quero ter certeza de ter tudo arrumado e arrumado de acordo com o padrão MVC.
Eu suspeito que já existe uma aula em cacau que facilita a implementação de um contêiner de visualização, como talvez NSCollectionView
.
Parece que não existe uma maneira (fácil) para exibir visualizações de tamanho diferente em um NSCollectionView
, no entanto. Devo continuar implementando meu costume NSView
(provavelmente usando um NSArrayController
para seleção e suporte de classificação), ou existem maneiras melhores de percorrer?
Qualquer ajuda é muito apreciada
Solução
Infelizmente, a resposta é que você terá que rolar o seu próprio. NSCollectionView
não permite itens de tamanho variável (que também descartam estados expandidos/colapsados).
Para um número limitado de itens, você pode realizar isso com bastante facilidade (você só precisa de uma visualização de contêiner que organize as subviews corretamente quando solicitado para fazer o layout, então precisará se certificar de que o rekout quando as coisas mudarem). Para muitas subvisões, no entanto, você precisará tomar cuidado para ser o mais eficiente possível. Isso pode começar com a criação o mínimo possível (apenas aqueles "depois" da visão redimensionada, por exemplo) e se tornarem tão complexos quanto o cache de uma representação visual de uma visão de protótipo, desenhando as imagens em cache (FAST!) Para todos, exceto a visão, exceto a vista sendo editado e apenas usando/posicionando uma visão "real" para a exibição que está sendo editada.
Arrastar e soltar funciona da mesma forma que sempre, mas nenhuma das contas acima da bela animação NSCollectionView
da-te. :-) É rápido e lindamente animado com precisão Porque Todas as subvisões são uniformes (portanto, os cálculos de layout são rápidos e simples). Depois de adicionar tamanhos irregulares, o problema se torna significativamente mais complicado.
Conclusão: se você precisar de visualizações de tamanho variável, NSCollectionView
Não funcionará e você precisará rolar o seu próprio ou encontrar o código compartilhado de outra pessoa, mas o desempenho e a bela animação não serão fáceis.