Domanda

Ho trascorso il tempo di apprendimento come utilizzare l'SDK iPhone. Ho letto " Beginning iPhone Development: Exploring the iPhone SDK " da cima a fondo e non ho mai visto un esempio di viste multiple all'interno di un XIB.

Per illustrare quello che voglio dire, ecco un colpo di schermo di un XIB con la configurazione semplice di quello che sto facendo riferimento a:

alt testo http: // theopensourceu. com / wp-content / uploads / 2009/04 / un-XI ter-multiple-views.png

Immagino che ci deve essere un motivo ben preciso che non ho mai visto questo. Negli esempi di Apple e in tutte le mie letture finora, più XIBs vengono utilizzati con una sola 'vista' (e talvolta il controller di navigazione o una barra di controllo Tab, ecc). Qual è la ragione di questo? Devo evitare di viste multiple all'interno di un XIB? Quali sono i vantaggi o svantaggi a per entrambi i metodi?

Grazie in anticipo

È stato utile?

Soluzione

E 'una questione di ottimizzazione della memoria e tempi di caricamento. Se mettete tutte le vostre opinioni in un XIB, poi quando i lanci di applicazione, si deve caricare l'intero XIB nella memoria e costruire tutti gli oggetti di tutti i controlli, e questo richiede una quantità non trascurabile di tempo.

Se invece si separano le vostre opinioni in XIBs separati, allora la vostra applicazione si avvia molto più velocemente, perché solo il XIB contenente la vista iniziale viene caricato, e sarà anche utilizzare meno memoria in un primo momento. Poi, quando la vista cambia, è possibile caricare il XIB contenente la nuova vista pigramente. Ciò comporterà un intoppo minore quando si apre una vista per la prima volta. Se sei davvero cercando di ottimizzare l'uso della memoria, è anche possibile scaricare la vista precedente quando si passa di vista, ma io non consiglierei questo, in quanto ciò comporta un intoppo ogni volta che si accende di vista, invece di appena la prima volta che si passa a un determinato punto di vista.

Altri suggerimenti

In seguito alla risposta precedente, ci sono alcuni momenti in cui si desidera caricare più vista allo stesso tempo. Ecco un esempio: si sta visualizzando un report con più pagine e si sta andando ad utilizzare un UIScrollView per gestirli. Quando l'utente è fatto l'esplorazione del rapporto, che si chiuderà il rapporto che respingere la vista.

Crea un UIScrollView in un XIB con un UIView per ogni pagina che vi serve. Poiché le UIViews sono parte del XIB, saranno caricati nella memoria insieme, tutti in una volta, quando si apre il report. Creare due UIViewControllers e li usa per visualizzare la pagina visualizzata e quella in corso scorrere a. Quando l'utente si muove attraverso le pagine, ri-usare l'UIViewController sulla pagina da scorrere lontano dal mantenere la pagina da scorrere a.

Questo assicurerà grande prestazione mentre l'utente sta sfogliando le pagine. Si carica tutte le pagine in una volta in anticipo nella memoria. Ho utilizza solo due UIViewControllers, e cambia solo che viste sono in loro e si muove intorno.

Questo ha anche il grande vantaggio di avere tutte le pagine in un unico XIB. Rende più facile da modificare e più veloce da caricare oltre separata XIB di. Devi solo assicurarsi di avere la memoria per caricare tutte le pagine in una sola volta. Se si tratta di contenuti statici (come nel mio caso) è un ottimo modo per andare.

Se siete alla ricerca di un buon esempio di come fare questo, ho trovato questa risorsa di essere un ottimo punto di partenza:

http://cocoawithlove.com/2009/01 /multiple-virtual-pages-in-uiscrollview.html

Questo è un avvertimento a tutti coloro che cercando di attuare paesaggio e ritratto con due viste in un unico XIB (iOS 4 con Xcode 4). Lo svantaggio principale di avere due punti di vista in un unico XIB-per me era che è possibile collegare un solo oggetto UIOutlet in un XIB per un singolo oggetto UIOutlet in un controller della vista.

Quindi, per esempio, se si dispone di un XIB con vista per il paesaggio e la vista per il ritratto, e entrambe le viste contengono gli stessi oggetti di interfaccia in diverse posizioni (ad esempio un UILabel nel paesaggio e un UILabel in verticale). Non è possibile collegare l'UILabel nella vista ritratto e l'oggetto UILabel nella vista paesaggio per un singolo oggetto UILabel nel controller della vista al tempo stesso .

Trovo che questo sia una delusione, come la documentazione iOS UIViewController (iOS 4.3) ha suggerito che ho potuto realizzare vedute paesaggistiche costume e ritratto passando tra due punti di vista di programmazione durante la rotazione dello schermo.

Dopo aver trascorso un po 'di tempo per capire come fare questo, ho scoperto che è possibile avere due diversi punti di vista collegati a un singolo controller di vista, ma è necessario avere sbocchi per entrambe le viste. Ad esempio, nel mio controller della vista, ho due oggetti UILabel (uno per la connessione a un UILabel nella vista ritratto, uno per connettersi a un UILabel nella vista del paesaggio). Nel mio codice, ogni volta che aggiorno presa paesaggio, ho anche aggiornare il paesaggio ritratto.

Non molto elegante, ma funziona, e come questo è per una semplice visione con uno schermo, non userà troppa memoria per avere avere tutti gli oggetti dell'interfaccia utente duplicati nel controller e viste. Non vorrei creare un progetto che ha fatto in questo modo ancora una volta, ma è stata una buona abbastanza work-around per quel progetto.

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