Bisogno di fare un diagramma di Gantt per il controllo di iOS, per disegnare o per sottoview?

StackOverflow https://stackoverflow.com//questions/22001895

Domanda

Io sono quasi pronto per iniziare a creare un diagramma di Gantt per il controllo di iOS per la mia app.Ho bisogno di mostrare una sequenza temporale di eventi.Fondamentalmente un mucchio di rettangoli, alcune linee/archi per qualche decorazione, eventualmente, un punto di contatto o due per modificare gli attributi.Esso sarà essenzialmente essere un "full screen" controllo sul mio telefono.

Vedo due percorsi per attuare questa usanza UIView sottoclasse:

  1. Semplicemente implementare drawRect: e andare in città utilizzando CoreGraphics le chiamate.Più probabile divisa su un sacco di metodi privati che fanno tutto il lavoro di disegno.Forse cache di alcune informazioni necessarie per aiutare con qualsiasi sub-regione di rivelamento.

  2. Piuttosto che "disegna" la grafica, aggiungere un po ' di UIViews come bambini addSubview: e la manipolazione di loro layer proprietà per ottenere loro di mostrare le diverse opere grafiche, e bounds\frame per farli posizionato in modo appropriato.E poi basta lasciare "disegno" prendersi cura di sé.

È un percorso migliore rispetto agli altri?Posso finire di provare entrambi, nel lungo periodo, solo per vedere, ma ho pensato di cercare la saggezza di coloro che sono già passati prima.

Il mio immagino è che il più veloce la soluzione sarebbe quella di andare la drawRect: percorso, e la sottoview approccio richiederebbe più di codice, ma forse essere più robusto (più facile colpire il rilevamento, il supporto per l'animazione, il ridimensionamento automatico di gestione, ecc).Io voglio essere in grado di attuare pinch to zoom e così, a lungo termine.

AGGIORNAMENTO

Sono andato con il UICollectionView l'approccio.Che mi ha fatto selezione e di scorrimento per la connessione (dopo alcune sorprese).Sono stato molto soddisfatto dei risultati ottenuti finora.

È stato utile?

Soluzione

Andando con CoreGraphics sta la forza di scrivere molte più righe di codice di edificio con UIViews, anche se è più performante e meglio sulla memoria.Tuttavia, si sta probabilmente andando ad avere bisogno di una soluzione più efficace per la gestione dei contenuti.Un UICollectionView mi sembra una soluzione adeguata per il mapping dei dati in una vista con un custom UICollectionViewCell sottoclasse.Questo sta per essere molto più veloce da sviluppare rispetto a rotolare il vostro proprio, e viene fornito con una grande flessibilità attraverso UICollectionViewLayout sottoclassi.Pinch to zoom non è supportata nativamente, ma ci sono modi per farlo.Questo è anche meglio per la memoria di utilizzo di un mazzo di UIViews a causa di cella riutilizzo, ma il caricamento può diventare lento e con poche centinaia di elementi che tutti hanno diverse dimensioni per essere calcolato.

Altri suggerimenti

Quando si tratta di prestazioni, ben scritto drawRect: è preferibile, soprattutto quando si potrebbe rendere molti invia: trasferisce.Con vista, un intero sistema di layout va a lavoro, e tanto peggio se si dispone di layout automatico, dove un intero sistema di layout va in città e uccide la vostra performance.Ho recentemente aggiornato il nostro calendario viste da vista-in base a CG-based per motivi di prestazioni.

In tutti gli altri aspetti, lavorando con vista è di più, naturalmente.Interface Builder, semplice gesto di riconoscimento di installazione, OO, etc.Si potrebbe ancora creare classi logiche per ogni elemento e hanno disegnare se stesso nel contesto corrente (migliore per passare un contesto di riferimento e disegnare su di che), ma ancora non come dritto in avanti.

Sui dispositivi più recenti, vista una performance di disegno è abbastanza alto, in realtà.Ma se si desidera che questi iPhone 4 e 4S, se si desidera che questi iPad 3 dispositivi, che mancano un bel po ' in prestazioni della GPU, direi, a seconda dei grafici potenziali dimensioni, si potrebbe andare il CG modo.

Ora, si parla di un pizzico di zoom.Questa è una cagna, non importa cosa.Se si scrive il drawRect: beh, si potrebbe, infine, attività di affiancamento e di lavorare con quella.

Se avete in programma permette all'utente di spostare le parti del grafico di tutto mi sarebbe sicuramente consigliamo di andare con il punto di vista.

FYI, si sarà in grado di gestire un pizzico di zoom con drawRect bene.

Cosa vorresti farmi utilizzando UIView in questo caso sarebbe a supporto del trascinamento di parti del grafico, l'animazione di transizioni nel grafico, e toccando gli elementi del grafico (anche se non sarebbe stato troppo duro con drawRect:).Inoltre, se si dispone di elementi del grafico che avrà bisogno di pesante utilizzo della CPU per il rendering per ottenere prestazioni migliori, se avete necessità di ridisegnare sub porzioni del grafico con UIView partire il rendering di tutti gli elementi memorizzati nella cache per un livello e si avrà solo bisogno di ridisegnare i pezzi che ti interessano e non l'intero grafico.

Se il grafico sarà MOLTO grande E si desidera utilizzare drawRect:probabilmente si desidera guardare utilizzando CATileLayer per voi di supporto in modo che non hai l'intero livello in memoria.Questo può aggiungere aggiunto sfide, se si desidera solo per rendere il richiesto piastrelle e non l'intera area.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top