Ho un UIScrollView e voglio che sia in grado di scorrere in entrambe le direzioni (lo fa attualmente) ma solo uno alla volta. Quindi, ad esempio, se inizi a scorrerlo orizzontalmente, non si muoverà affatto verticalmente finché non lo lasci andare e inizi a spostarlo verticalmente. Come potrei andare a fare questo?UIScrollView che scorre in una sola direzione alla volta
risposta
Impostare la proprietà directionalLockEnabled
su SÌ. Da documenti Apple:
Se questa proprietà è NO, lo scorrimento è consentito in entrambe le direzioni orizzontale e verticale. Se questa proprietà è SÌ e l'utente inizia a trascinare in una direzione generale (orizzontale o verticale), la vista di scorrimento disabilita lo scorrimento nell'altra direzione. Se la direzione di trascinamento è diagonale, lo scorrimento non sarà bloccato e l'utente può trascinare in qualsiasi direzione fino al completamento del trascinamento. Il valore predefinito è NO
La risposta accettata per questa domanda non è del tutto corretta. Secondo la documentazione corrente directionalLockEnabled
(come citato nella risposta originale):
Se la direzione di trascinamento è diagonale, allora lo scorrimento non sarà bloccato e l'utente può trascinare in qualsiasi direzione fino a quando la resistenza completa.
Ho trovato questo il caso. Se la direzione iniziale del trascinamento è più vicina a un angolo di 45 gradi tra gli assi xey, il blocco direzionale fallisce. Se trascini più o meno orizzontalmente o verticalmente, il blocco si attiva.
Per Un modo per realizzare true bloccaggio uni-assiale, vedere il link: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html
il modo più semplice per raggiungere questo obiettivo è impostato il directionalLockEnabled
di YES
ed attuare le delegato UIScrollerView simili
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x != 0 &&
scrollView.contentOffset.y != 0) {
scrollView.contentOffset = CGPointMake(0, 0);
}
}
Molto semplice e funziona molto bene. Grazie. –
Questo ha funzionato per me sulla base della risposta di @Joe xi. Swift 3,0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}
}
- 1. UIScrollView chiama layoutSubviews() ogni volta che scorre a scorrimento
- 2. css3 ombre casella in una sola direzione?
- 3. Limitare trascinare in una sola direzione
- 4. Controllare la direzione di scorrimento in UIScrollView
- 5. MSDTC/DTCPing funziona in una sola direzione
- 6. UIScrollView non scorre (Storyboard)
- 7. UIScrollView non scorre fino all'orientamento
- 8. sqlite3.Warning: È possibile eseguire una sola istruzione alla volta
- 9. RecyclerView.onBindViewHolder chiamato una sola volta
- 10. L'animazione funziona una sola volta
- 11. iPhone SDK: UIScrollView non scorre
- 12. UIScrollView scorre troppo dopo lo zoom iniziale
- 13. Focus una sola volta - Jquery
- 14. query più liste in una sola volta
- 15. Rimodellare valori multipli in una sola volta
- 16. UIScrollView determinare la direzione di scorrimento sul scrollViewDidEndDragging quando paging
- 17. PHP che serve una pagina alla volta
- 18. Rileva la direzione di UIScrollView scorri in scrollViewWillBeginDragging
- 19. _adjustContentOffsetIfNecessario - UIScrollView scorre automaticamente verso l'alto
- 20. Primefaces overlay dinamicoPannello che mostra una sola volta
- 21. È possibile avere campi che sono assegnabili una sola volta?
- 22. Linq chiama una funzione una sola volta in una dichiarazione
- 23. Come rilevare che UITableView scorre
- 24. Perdita di memoria ogni volta che viene rilasciato UIScrollView
- 25. Utilizzo del timer una sola volta
- 26. GMSMapView touchesbegan attivato una sola volta
- 27. Rimuovere completo hashset in una sola volta in Redis
- 28. ng-class binding una sola volta
- 29. Gulp Watch eseguito una sola volta
- 30. Come si usa CGAffineTransformMakeScale e Rotation in una sola volta?
Eh, ho impostato che la proprietà in IB, ma non ha funzionato. Funzionava solo a livello di programmazione. Grazie! – Letrstotheprez
Ho aggiunto questo: - (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView ha funzionato per me. E ha aggiunto: scrollView.directionalLockEnabled nella funzione. Quando ho letto questa risposta mi ci è voluto un po 'di tempo per capire cosa stavo aggiungendo directionLockEnabled e dove lo stavo aggiungendo –