2011-08-27 13 views
5

Sono nuovo di Cocoa e cerco un piccolo consiglio per un'applicazione da esperti Cocoa-ers.Consigli per un'applicazione di disegno di cacao

Sto costruendo un'app di base OmniGraffle in cui gli oggetti sono disegnati/trascinati su una tela. Dopo che gli oggetti sono sul canvas, possono essere selezionati per modificare le loro proprietà (colore di riempimento, colore del tratto/larghezza, ecc.), Essere ridimensionati, spostati in una nuova posizione, ecc.

Per riscaldarsi, Ho scritto un'app di disegno di base che crea oggetti (cerchi, rettangoli, ecc.) Disegnati con il mouse su un oggetto personalizzato NSView, aggiunge gli oggetti a una raccolta NSArray e visualizza i contenuti della raccolta nella vista. Potrei continuare su questa linea, ma dovrò aggiungere il supporto per rilevare la selezione degli oggetti, risolvere z-index, messa a fuoco, maniglie di trascinamento, ecc. Con tutto il rendering associato. Inoltre, rendere ogni oggetto su ogni ciclo sembra terribilmente dispendioso.

Sembra che un approccio migliore sarebbe quello di rilasciare oggetti vista leggero su una tela in grado di rilevare gli eventi del mouse su se stessi, disegnare se stessi e gli anelli di messa a fuoco e così via. Tuttavia, mentre NSView sembra un oggetto con queste proprietà, vedo molte chiacchiere sul web che si tratta di un componente pesante con un sacco di bagagli. Mi sono imbattuto in NSCell s e ho letto su di loro, ma non sono sicuro che siano la giusta alternativa.

Qualche suggerimento? Se riesci a spingerti nella giusta direzione lo apprezzerei molto.

+0

Sicuramente sconsiglio di usare 'NSCell'. Anche 'NSTableView' si è allontanato da esso nella sua ultima iterazione. 'NSCell' non è divertente con cui lavorare. –

+1

Vorrei anche * altamente * consigliare di guardare l'esempio di Sketch (penso che quello corrente sia chiamato "Sketch + Accessibility" se cerchi i documenti) se non lo hai già fatto. Ci sono molte buone idee lì dentro. –

risposta

3

Prima regola di ottimizzazione: non farlo prima.

Un NSView personalizzato per forma suona proprio per me. Spetterà a te scegliere sottoclassi diverse per forme diverse; Comincerei con una singola classe generica di visualizzazione di forme e forme in grado di descriversi come percorsi di Bézier, ma non essere troppo severo riguardo al fatto di mantenerlo, cambiarlo se fosse più semplice. Basta implementarlo comunque ha senso per te.

Quindi, una volta che hai funzionato, profilalo. Crea il maggior numero di forme possibile. Quindi fai di più. Forme con un numero elevato di poligoni. Intersezioni. Riempimenti, tratti, ombre e sfumature. Probabilmente dovresti creare un documento separato per ogni fattore di stress. Si noti solo a livello dell'utente cosa è lento. Quindi, avvia la tua app sotto Strumenti e controlla perché è lenta.

Forse le visualizzazioni si riveleranno essere la soluzione sbagliata. Non dimenticare di esaminare CALayers. Ma non escludere nulla di lento finché non l'hai provato e misurato.

+0

Bene, tutto dipende dal tipico caso d'uso: se l'applicazione dovrebbe gestire solitamente migliaia di oggetti, preferirei evitare di utilizzare migliaia di istanze di NSView e scegliere un design diverso in anticipo. – Jay