Layout di viste matematiche (iOS)

4

Sto cercando di capire il modo giusto per incapsulare informazioni grafiche sugli oggetti matematici. Non è semplice Ad esempio, una matrice può includere parentesi quadre attorno alle sue voci, oppure no. Alcune cose portano a oggetti secondari - ad esempio, una matrice potrebbe tracciare la dimensione del font da utilizzare per le sue voci. Allo stesso modo, il colore del carattere e il colore dello sfondo porterebbero alle voci. Altre cose non vanno giù. Ad esempio, le voci della matrice non hanno bisogno di sapere se la matrice ha o meno quelle parentesi quadre.

Sulla base di tutto quanto sopra, ho bisogno di calcolare le dimensioni per tutto, quindi i frame. Tutto ciò può dipendere dalle proprietà memorizzate sopra. La dimensione di una matrice dipende dalle dimensioni delle sue voci e anche dal fatto che abbia o meno le parentesi.

Ciò di cui sto facendo fatica non sono i singoli modi per calcolare frame sensibili per questo o quello. È la struttura organizzativa complessiva dell'intera cosa. Come posso tenere traccia di tutto senza impazzire.

Un particolare ostacolo è degno di nota - per ragioni per cui non voglio entrare qui, ho bisogno di calcolare le dimensioni e le cornici per ogni cosa prima di istanziare qualsiasi vista reale. Quindi, ad esempio, se ho un oggetto Matrix, devo calcolare la sua dimensione prima di creare un MatrixView. Se ho un'equazione, devo calcolare la dimensione della vista per l'equazione prima di creare la vista effettiva. Quindi ho chiaramente bisogno di oggetti separati per quei calcoli. Ma non riesco a capire una struttura di classe sensata per quegli oggetti. Se li metto tutti in una singola classe, ottengo alcuni vantaggi perché la copia diventa facile. Ma finisco anche con una classe gonfia che contiene informazioni che sono irrilevanti per alcuni oggetti, ad esempio se includere o meno parentesi attorno alla matrice. Ma se uso molte classi diverse, copiare le proprietà diventa un vero dolore.

Se è importante, questo è tutto nell'obiettivo C, per un ambiente iOS. Qualsiasi suggerimento sarebbe molto apprezzato.

EDIT: per chiarire: ho oggetti modello che contengono informazioni matematiche e posso calcolare il testo che verrà visualizzato. Anch'io penso avrà senso avere degli oggetti di stile che conosceranno la dimensione del carattere. Pertanto, tra i due, posso calcolare tutto. Ciò lascia ancora il problema di come tenere traccia delle informazioni risultanti. Non voglio chiamare i metodi "compute-your-size" più del necessario in quanto costosi. Quindi devo memorizzare alcune cose. Ma dove? E come gestisco il caching?

    
posta William Jockusch 19.06.2012 - 05:01
fonte

2 risposte

1

Un modo per fare ciò che funziona bene in Objective-C e iOS è usare MVC come principio guida. È necessario separare i dati effettivi - i termini di un polinomio, le voci in una matrice e così via - dal modo in cui i dati vengono presentati. Questo è proprio ciò a cui MVC è bravo: avrai oggetti modello che contengono le equazioni specifiche e oggetti simili a viste che sanno come rendere diversi tipi di entità matematiche.

Spesso parliamo di MVC come un'architettura per un'intera applicazione, ma puoi applicare gli stessi principi su scale più piccole. Cocoa e Cocoa Touch lo fanno - testimoniano il modo in cui UITableView utilizza un delegato (che è come un controller) e un'origine dati (che è come un modello).

Ad ogni modo, se stai cercando di preservare la tua sanità mentale, dovrai separare i diversi tipi di attività in diversi tipi di classi. Non avrai una sola classe che rappresenta e disegna una matrice; avrai una classe che memorizza i dati e forse opera su una matrice e una classe che sa come presentare tali dati all'utente.

    
risposta data 22.06.2012 - 19:59
fonte
0

Non ho esperienza diretta con questo, ma sono rimasto impressionato dall'implementazione di MathJax. Viene utilizzato (tra l'altro) nel Notebook iPython e su StackExchange.

È open source, quindi puoi trovarlo su GitHub . Probabilmente vorrai iniziare a guardare i formati di output. Le cose interessanti sembrano iniziare intorno alla riga 706, qui .

Spero che ti aiuti!

    
risposta data 29.06.2012 - 23:13
fonte

Leggi altre domande sui tag