Domanda

Sto avendo la mia prima incursione nella programmazione Cocoa Touch (e uno dei miei primi in cacao in generale) e la scrittura di un semplice gioco per l'iPhone, anche se questa domanda è su tocco di cacao in generale.

L'utente principale costituito da una striscia di pulsanti azione identici (solo colore variabile) disposto orizzontalmente attraverso lo schermo. Anche se si comportano come pulsanti hanno bisogno di avere un aspetto disegnato su misura. Ogni risponde a toccare gli eventi nello stesso modo, innescando altri eventi nell'applicazione.

voglio definire una visualizzazione personalizzata, in parte per avere più controllo sul comportamento che avere un mucchio di pulsanti standard, e in parte per saperne di più sulla programmazione di cacao.

  • Dovrei definire una vista principale con una serie di subviews ciascuno dei quali pareggi e in avanti tocca eventi? Ogni pulsante dovrebbe fare cose standard come mostrare uno stato premuto quando viene toccato e così via . Ci sono viste contenitore pre-esistenti per questo tipo di scenario?

  • O devo solo definire un punto di vista principale che disegna tutta la fascia e rileva in cui si verifica un tocco Sento che questo è un approccio mal progettato -? Non dovrei programmazione del test colpire codice.


A cura di chiarire la questione

È stato utile?

Soluzione

L'approccio più leggero è quello di aggiungere sottolivelli al livello del UIView. Utilizzare hitTest:. Spedire tocchi si riceve su di voi UIView all'istanza CALayer che deve riceverlo

Se avete bisogno di più del comportamento UIResponder (touchesBegan ecc), si potrebbe desiderare di andare con subviews invece di sottolivelli in quanto ciò permetterà di gestire gli eventi direttamente negli oggetti, piuttosto che dover inviare loro da un risponditore centrale (il vostro UIView principale).

Di conseguenza, il bit essenziale può essere solo la quantità di comportamento associato con i vostri singoli pulsanti dovrebbe essere noto (gestito) da parte del vostro UIView principale. Se ha senso avere tutto controllato da un posto centrale, si può mettere tutta la logica del UIView e basta usare sottolivelli per scopi di visualizzazione leggeri. Se ha più senso mettere il comportamento nei pulsanti stessi, essi shoudl essere UIResponders e come tali UIView sottoclasse ed essere aggiunti come subviews di visualizzazione principale.

Altri suggerimenti

Si consiglia di utilizzare una vasta gamma di subviews -. In questo modo ogni classe "pulsante" sa come disegnare se stesso e la sua superview (il vostro dichiarato "vista principale") pone i pulsanti di cui hanno bisogno per andare

E in secondo luogo sulla NDA: basta parlare di iPhone

.

Se avete un sacco di pulsanti e vuole fare cose di fantasia con loro, mi consiglia di utilizzare strati . Il tuo UIView gestirà interpretare quale livello ha avuto il tocco (di rilevamento del contatto) e  rispondere in modo appropriato. Se tutto quello che stai facendo è la gestione di un intero gruppo di pulsanti con vari effetti e animazioni, questo potrebbe essere un percorso più facile.

Per quanto riguarda il cattivo di ingegneria, non a tutti. Se si dà un'occhiata alle guide associate, vedrete l'animazione nucleo e gli strati non richiedere test colpito (anche se questo è relativamente facile), ma è molto più pulita rispetto al UIView facendo tutto il disegno e più efficiente rispetto a molti subviews. Si scivola proprio tra questi due approcci bene.

Full disclosure: Sto solo confezionamento mia testa intorno a come utilizzare al meglio questa roba me stesso, ma per controlli interattivi più complicate

.

È possibile il layout la visualizzazione in Interface Builder. È sufficiente trascinare un gruppo di UIButtons in vista del controller della vista.

Per rispondere a eventi, si definisce un IBAction nel vostro controller della vista e collegare i pulsanti ad esso.

Questo è tutto molto semplice. Ho davvero suggerire che almeno cammina attraverso l'introduzione di programmazione iPhone che Apple ha in linea. Vi insegnerà iPhone e Interface Builder basi.

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