2013-10-08 12 views
5

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à UIScrollViewdelaysContentTouches 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.

risposta

0

Sei sicuro che funzionasse su iOS5/6? In base alla mia esperienza e ai post come UIScrollview delaysContentTouches issue, non funziona.

Forse un codice di esempio che mostra che funziona su iOS5/6 ma non su iOS7 ti aiuterà a rispondere alla tua domanda.

0

questo funziona per me:

[scrollView setCanCancelContentTouches:YES]; 
[scrollView setDelaysContentTouches:YES];