Pregunta

Estoy empezando a desarrollar mi primera aplicación de cacao en toda regla que contiene un punto de vista que me gustaría comportarse (y mirada) similar a AMWorkflowView de Automator.

Las características básicas que me gustaría lograr:

  • Posicionamiento de subvistas
  • Pantalla de subvistas en estados expandidos / colapsadas
  • La selección múltiple
  • Arrastrar y soltar

Con el fin de acostumbrarse a Cocoa, empecé con un NSView costumbre que sirve principalmente como un contenedor para los subvistas personalizados y manipule su posicionamiento y selección múltiple. Los subvistas también son subclases de NSView, y contienen una cantidad variable de puntos de vista a sí mismos, como botones, etiquetas y menús emergentes, y por lo tanto pueden tener diferentes alturas. Esto funcionó bastante bien, pero antes de seguir, quiero para asegurarse de tener todo limpio y ordenado de acuerdo con el patrón MVC.

Sospecho que ya hay una clase en Cocoa que facilita la implementación de un contenedor de vista, como tal vez NSCollectionView. Parece que no hay manera (Fácil) para mostrar vistas de diferentes tamaños en un NSCollectionView, sin embargo. ¿Debo continuar la implementación de mi NSView personalizada (probablemente utilizando un NSArrayController para la selección y clasificación de apoyo), o hay mejores maneras de ir?

Cualquier ayuda es muy apreciada

¿Fue útil?

Solución

Por desgracia, la respuesta es que tendrá que rodar su propia. NSCollectionView no permite artículos de tamaño variable (que también descarta estados desplegado / contraído).

Para un número limitado de artículos, usted puede lograr esto con bastante facilidad (sólo tiene una vista contenedor que organiza los subvistas adecuadamente cuando se le preguntó a disposición, entonces usted necesita para asegurarse de que se vuelva a la disposición cuando las cosas modificar). Para muchos subvistas, sin embargo, tendrá que tener cuidado para ser lo más eficiente posible. Esto puede comenzar con la colocación a cabo lo menos posible (sólo aquellos "después" de la vista redimensionada, por ejemplo) y obtener tan complejo como el almacenamiento en caché una representación visual de una vista prototipo, dibujar las imágenes en caché (rápido!) Para todos pero la vista siendo editado, y sólo utilizando / posicionamiento de una vista "real" para la vista que se está editando.

Arrastrar y soltar funciona igual que siempre lo ha hecho, pero ninguno de los grupos anteriores para la NSCollectionView animación le da bastante. :-) Es rápido y muy bien-animada precisamente ya todos los subvistas son uniformes (por lo que los cálculos de diseño son rápidos y sencillos). Una vez que añadir tamaños irregulares, el problema se vuelve mucho más complicado.

El resultado final:. Si necesita puntos de vista de tamaño variable, NSCollectionView no funcionará y tendrá que rodar su propia o encontrar algún otro código compartido, pero el rendimiento y la animación hermosa no será fácil

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top