Qualcuno può spiegare la differenza di alto livello tra questi due metodi? In particolare, quando utilizzeresti l'uno sull'altro, e c'è qualche sovrapposizione in termini di finalità di questi metodi? Sembra che abbiano lo stesso scopo ma non sembrano affatto correlati nella documentazione, e questo mi ha confuso.Qual è la differenza tra beginTrackingWithTouch e touchBegan?
risposta
beginTrackingWithTouch: withEvent:
1) sottoclasse UIControl
2) Inviato al controllo quando un tocco relativo al dato evento entra limiti del controllo.
3) Fornire comportamento di monitoraggio personalizzato (ad esempio, per modificare l'aspetto highlight). Per fare questo, utilizzare uno o tutti i seguenti metodi: beginTrackingWithTouch: withEvent :, continueTrackingWithTouch: withEvent :, endTrackingWithTouch: withEvent:
touchesBegan: withEvent:
1) sottoclasse UIResponder
2) Indica al ricevitore quando una o più dita si toccano in una vista o in una finestra.
3) Ci sono due tipi generali di eventi: eventi di tocco e gli eventi di movimento. I principali metodi di gestione degli eventi per i tocchi sono touchesBegan: withEvent :, toccaMoved: withEvent :, toccaEnded: withEvent :, e toccaCancelled: withEvent :. I parametri di questi metodi associano i tocchi con i loro eventi, in particolare tocchi nuovi o modificati, consentendo in tal modo agli oggetti responder di tracciare e gestire i tocchi mentre gli eventi consegnati avanzano attraverso le fasi di una sequenza multi-touch. Ogni volta che un dito tocca lo schermo, viene trascinato sullo schermo o sollevato dallo schermo, viene generato un oggetto UIEvent. L'oggetto evento contiene oggetti UITouch per tutte le dita sullo schermo o appena sollevato da esso.
Avendo appena eseguito questo oggi, penso che la differenza principale è che beginTrackingWithTouch e gli amici sono solo per il monitoraggio - non altro - in particolare non per la gestione di destinazione/azione. Quindi, se esegui l'override su touchBegan, sarai anche responsabile della chiamata a sendActionsForControlEvents al termine dei tocchi. Ma se usi beginTrackingWithTouch, questo è gestito gratuitamente.
Ho scoperto questo implementando beginTrackingWithTouch (per un controllo pulsante personalizzato) pensando che fosse solo una sostituzione di traverso per la gestione touchesBegan. Quindi in endTrackingWithTouch, ho chiamato sendActionsForControlEvents se touchInside era vero. Il risultato finale è stato che l'azione è stata chiamata due volte, perché prima il meccanismo incorporato ha inviato l'azione, poi l'ho chiamata. Nel mio caso, sono solo interessante nella personalizzazione dell'evidenziazione, quindi ho preso la chiamata a sendActionsForControlEvents, e tutto va bene.
Riepilogo: utilizzare beginTrackingWithTouch quando tutto ciò che è necessario è personalizzare il tracciamento e utilizzare i touchBegan quando è necessario personalizzare la gestione di destinazione/azione (o altri dettagli di basso livello).
Buona risposta, grazie. – petric
Grazie. Per metterlo in contesto: ho un controllo personalizzato che contiene una serie di sottoview (ad esempio etichette). L'utente dovrebbe essere in grado di trascinare quelle etichette e interagire reciprocamente (durante il movimento) in un modo controllato dal controllo principale (contenitore).Quale famiglia di metodi tattili dovrei utilizzare per implementare il trascinamento: quelli forniti da UIControl o quelli forniti da UIResponder? – rmp251