Pensa a un UIScrollView
con incorporato (sottoview) UIView
s, disposto in una colonna. In iOS6 e in precedenza, la visualizzazione a scorrimento può essere configurata in modo tale che quando si sfiora il dito con un dito, le viste incorporate non ricevono gli eventi di tocco anche se il tocco iniziale si trova su una delle sottoview; ma se si tocca una sottoview senza sfogliare, la vista di scorrimento decide che questa non è un'azione di scorrimento e inoltra gli eventi di tocco alle viste incorporate. Questo comportamento era molto conveniente se si desiderava essere in grado di trascinare/rilasciare gli UIView
incorporati all'interno dello UIScrollView
.come rendere iOS 7 UIScrollView sopprime gli eventi di tocco su UIView incorporato
In iOS 7 la documentazione indica che l'impostazione della proprietà UIScrollView
delaysContentTouches
causerà il ritardo degli eventi di tocco fino a quando lo UIScrollView
deciderà se è in corso lo scorrimento. Ma in realtà, questo semplicemente non sembra funzionare. La sottoview riceve immediatamente gli eventi di tocco e risponde a loro se l'evento di scorrimento a scorrimento si trova su una delle sottoview. Quindi se la sottoview è programmata per trascinamento/rilascio inizia a trascinare mentre scorre anche la vista scroll.
Sembra che il modello per questo comportamento sia stato modificato, poiché iOS 5/6 ha entrambi soppresso gli eventi di tocco mentre decideva se si tratta di un'azione di scorrimento. Alcuni nuovi metodi sono ora disponibili per annullare gli eventi di touchdown dopo che lo UIScrollView
decide che sta scorrendo. Ma ovviamente questo non è utile se il codice drag/drop ha anche iniziato a spostare la sottoview.
La mia domanda: C'è un modo per evitare che iOS 7 UIScrollView
s di invocare basso livello gli eventi touch-down sulle sue subviews, quando si avvia un'azione di scorrimento da accarezzare una visualizzazione secondaria? Quando dico "basso livello", intendo eventi di tocco reali anziché utilizzare i riconoscitori di gesti. Sono convinto che la semplice impostazione della proprietà delaysContentTouches
su YES non funzioni.
Questo problema ha completamente sballato un codice abbastanza complesso che ha funzionato perfettamente e splendidamente in iOS 5 e 6; e, finora, non ho trovato alcun modo di dire allo UIScrollView
di sopprimere gli eventi alle sue subviews finché non determina se è in corso o meno di scorrere. Gli eventi passano, quindi un evento di cancellazione viene attivato successivamente, dopo che la vista di scorrimento determina che sta scorrendo. Sembra che il modello sottostante sia stato ridefinito in peggio, o questo è un bug. Qualsiasi intuizione sarà molto apprezzata.