2012-01-11 16 views
6

So che una domanda simile è già stata posta, ma non ho ottenuto una risposta soddisfacente. Quindi aggiungo di nuovo questa domanda.Come creare un'applicazione basata su temi?

In base alla selezione dell'utente nell'applicazione iphone, ho bisogno di cambiare l'aspetto dell'applicazione (immagini di sfondo con font a colori ecc.). C'è un modo standard per raggiungere questo obiettivo?

una possibile soluzione può essere la duplicazione di file xib per ciascun tema e il caricamento in base alla selezione. è un buon approccio? principalmente perché il cablaggio delle prese e delle azioni per le copie xib sembra un compito ridondante.

Mi piacerebbe vedere un suggerimento esperto per questo dubbio. Grazie per qualsiasi aiuto in anticipo.

-mia

risposta

0

Per la rotta non-XIB

Colore: iOS 5 espone le nuove API di aspetto. La maggior parte degli elementi dell'interfaccia utente ha l'opzione se si imposta una tintaColore o un backgroundColor. Raramente, anche un'immagine di sfondo.

Font: è sempre stato possibile modificare, ma non è stato possibile animarlo.

Immagine di sfondo: l'UIView principale dovrebbe avere l'opzione per un'immagine di sfondo o, in caso negativo, un colore di sfondo con un'immagine di motivo.

+0

Questo è solo l'impostazione dinamica del colore in base alla selezione. Va bene, ma sto cercando un'opzione efficiente come temi o stili in cui posso semplicemente passare i temi dinamicamente allo stesso tempo non devo gestire esplicitamente in codice o pennini duplicati. – mia

+0

[UIButton setTintColor: [UIColor someColor]]; devi gestire tutto da solo. Crea un paio di metodi con alcuni valori di colore preimpostati per ogni "nuovo stile" come lo chiami – CodaFi

0

Il modo migliore per implementare un'applicazione IOS basata su tema (non utilizzando ~ route xib). dovresti creare un file build.xml che contenga tutti i pezzi di temi. Dovresti mantenere lo stesso layout e puoi modificare le immagini, lo stile, i caratteri, il lang, le viste in quel layout in base al pref. In questo modo non stai duplicando alcun codice e otterrai le migliori prestazioni dalla tua applicazione.

+0

Spiacente, non capisco la tua spiegazione. Potresti spiegarci un po 'di più. Anche questo non è dinamico rt? significa che quando il programma è attivo e in esecuzione l'utente non può cambiare temi. – mia

0

Come ha detto CodaFI, se si utilizza iOS 5 o versione successiva, si dispone già di una funzione di ottimizzazione. Funziona così:

  • Aggiungere il protocollo <IAppearanceContainer> alla classe.

  • Decora la proprietà che intendi modificare con UI_APPEARANCE_SELECTOR. Esempio:

     
    @interface UINavigationBar : ... <IAppearanceContainer> 
    @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; 
    @end 
    

  • Cambiare il colore per tutte le istanze della classe:
     
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    

L'esempio precedente è il UINavigationBar, ma sarebbe lavorare con qualsiasi classe personalizzata. Per vedere gli oggetti già supportate in iOS 6.1, controllare la documentazione o eseguire i seguenti comandi:

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers 

grep -H UI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//' 

Diciamo che si desidera temi modulari:

  • scrivere un file grande plist con tutti i font, i colori , musica e cosa no. Ciascuno di questi file sarà un tema.
  • Leggere il file tramite un singleton e impostare i valori con linee come [x appearance] setWhatever:<plist value>] per ciascun elemento in grado di riprodurre temi.
  • Se si dispone di istanze dello stesso elemento che devono visualizzare elementi diversi, ottenere quelle immagini tramite il singleton.

Questo è più o meno la mancia da Amit Vyawahare. Ho detto plist invece xml perché sono più facili da leggere. Non duplicare i NIB a meno che non sia necessario.

Problemi correlati