¿Algún ejemplo "orientado a los fundamentos" de NSScroller?

Estoy buscando algún tipo de ejemplo básico y directo de cómo trabajar con un par de NSScrollers en un NSScrollView con un NSView personalizado.

Hay ejemplos esporádicos por ahí, que consisten en gran parte en ejemplos artificiales que utilizan interfaces creadas de manera programática, o se basan en la suposición de que el desarrollador está trabajando con un ImageView o TextView típico. Incluso el ejemplo de Sketch se basa en un NSView que utiliza la configuración de página en el cuadro de diálogo Imprimir para los límites, y todo está administrado por Cocoa. Así que no hay una discusión real o ejemplos en ninguna parte de cómo hacer que todo funcione con un Modelo personalizado (aunque eso puede ser parte del problema, porque ¿en qué se basa el Modelo?). Incluso la propia documentación de Apple es dudosa aquí.

Esencialmente, tengo un NSView subclasificado incrustado en un NSScrollView (de acuerdo con la Guía de la Vista de Scoll), en el que un usuario puede hacer clic en la vista para crear, editar y eliminar objetos, como un programa de ilustración. El modelo son aquellos objetos que son solo envoltorios de datos que simplemente registran su posición para que drawRect: use. La altura y el ancho se basan en valores personalizados que se traducen en píxeles según sea necesario.

Mi problema es que todos los ejemplos que he encontrado se basan en un editor de texto, un visor de imágenes o utilizan los tamaños de documento estándar en el cuadro de diálogo Configurar página. Debido a que estos son tipos de documentos comunes, Cocoa básicamente se encarga del desarrollador, por lo que el código de interacción está más o menos oculto (o simplemente no lo veo por lo que es). Mi proyecto no se ajusta a ninguna de esas necesidades y no tengo necesidad de imprimir. Insertar mi modelo en la propiedad documentView no funcionaría.

Solo estoy buscando un ejemplo sencillo sobre cómo inicializar los NSScrollers con un Modelo personalizado orientado a objetos (el documentView), y manejar el desplazamiento y la actualización en función de la acción del usuario, como cuando el usuario arrastra un puñado de objetos para La izquierda o hacia abajo o la ventana se redimensiona. Creo que estoy cerca de conseguirlo todo, pero me estoy perdiendo el punto de salto que une los controles con el documento.

(No es que importe en una pregunta de Cocoa, pero cuando hice esto en REALbasic, simplemente calculé y aplicé MaxX, MaxY al valor máximo de un ScrollBar basado en las acciones del usuario, observaría la posición en el ScrollBar cuando el usuario hace clic y dibujar según sea necesario. NSScrollers en el contexto de NSScrollView no son tan obvios para mí, parece.)

Aprecio el tiempo empleado por todos, pero estoy actualizando con más información con la esperanza de obtener una respuesta que pueda usar. Lo siento, pero nada de esto tiene sentido, los documentos de Apple son obtusos, pero tal vez me esté perdiendo algo dolorosamente obvio aquí ...

Tengo un conjunto de objetos que se encuentran en un NSDocument subclasificado que son titulares de datos que le dicen a drawRect qué y dónde dibujar. Esto esDerecho del ejemplo Sketch. El ejemplo de Sketch utiliza los tamaños de documento en el cuadro de diálogo Configurar página para el tamaño, por lo que no hay nada que mostrar aquí. Me gusta que Cocoa maneje el estado de las barras de desplazamiento, pero ¿cómo puedo vincular ScrollView para ver el estado del editor inicial que se encuentra en el NSDocument y las actualizaciones de esos objetos y el editor? ¿Calculo mi propio NSRect y se lo paso al NSScrollView? ¿Dónde y cómo? ¿Estoy haciendo esto en mi NSView personalizado que se ha incorporado en el NSScrollView o mi NSDocument en init? El NSScrollView no se crea mediante programación (no hay una forma fácil de hacerlo), por lo que todo está en el Constructor de Interfaces esperando a ser conectado. Me estoy perdiendo el gancho.

Quizás esté usando mi gorra "No lo entiendo" esta semana, pero esto no puede ser tan difícil. Las aplicaciones de ilustración, los editores MIDI y muchas otras aplicaciones personalizadas similares lo hacen todo el tiempo.

RESUELTOS (en su mayoría):

Creo que ahora tengo esto resuelto, aunque probablemente no sea la mejor implementación.

Mi clase de documento ahora tiene una propiedad NSRect DocumentRect que mira todos sus objetos y devuelve una nueva NSRect en función de su ubicación. Lo llamo en los eventos del mouse de NSView subclasificados con

<code>[self setFrame:[[self EditorDocument] DocumentRect]];
</code>

Esto actualiza el tamaño de la Vista en función de la interacción del usuario, y la ventana ahora controla el desplazamiento donde antes no lo hacía. En este punto, estoy descubriendo cómo hacer que el marco se expanda mientras se arrastra, pero al menos ahora tengo el concepto fundamental que faltaba.

La respuesta dada me indicó la dirección que necesitaba para ir aquí (documentView requiere una vista, que se traduce en mirar la clase NSView), por lo que Peter obtiene el crédito. Muchas gracias por la ayuda.

Respuestas a la pregunta(1)

Su respuesta a la pregunta