2012-06-05 13 views
7

Qual è il modo migliore per impostare i limiti sullo scorrimento sinistra/destra di un UIScrollView. Avrei pensato che sarebbe stato facile ma tutti i miei tentativi non hanno avuto successo.iOS. Come limitare lo scorrimento di UIScrollview in misura limitata?

Quindi, per essere chiari, ho bisogno di una soluzione che mi consenta di limitare a livello programmatico l'estensione di scorrimento ogni volta che è necessario durante l'utilizzo della mia app. Questo sarà più spesso in risposta a cambiamenti nei dati visualizzati.

Grazie,
Doug

risposta

-4

sono andato con il mio approccio di porre vincoli pan nel mio metodo layoutSubviews sovraccarico.

pseudo-codice:

Calculate criteria for constraining pan 
if (pan-constraint-is-met) { 

    Calculate pan-limit 
    [self setContentOffset:limitedContentOffset]; 

} 
7

Tutto quello che avrebbe bisogno di fare è cambiare la dimensione dei contenuti per la vista di scorrimento con il seguente codice.

[scrollView setContentSize:CGSizeMake(width, height)];

+0

Nel mio caso non posso alterare il contenuto in alcun modo. Sto facendo un'app di visualizzazione e la dimensione del contenuto è fondamentale per la visualizzazione. Quello che sto cercando è qualcosa di analogo a minimumZoomScale e maximumZoomScale. La modifica di questi valori non ha alcun effetto sul contenuto. – dugla

11

È possibile controllare la dimensione dei contenuti che utilizzano contentSize proprietà di vista di scorrimento. Se ciò non è sufficiente per te (ad esempio devi limitare l'area di scorrimento a una regione arbitraria nel mezzo del tuo contenuto) puoi forzare contentOffset ad essere nel limite richiesto nel metodo delegato della tua vista di scorrimento.

Fondamentalmente codice può apparire come:

- (void) scrollViewDidScroll:(UIScrollView*)scroll{ 
    CGPoint offset = scroll.contentOffset; 

    // Check if current offset is within limit and adjust if it is not 
    if (offset.x < minOffsetX) offset.x = minOffsetX; 
    if (offset.y < minOffsetY) offset.y = minOffsetY; 
    if (offset.x > maxOffsetX) offset.x = maxOffsetX; 
    if (offset.y > maxOffsetY) offset.y = maxOffsetY; 

    // Set offset to adjusted value 
    scroll.contentOffset = offset; 
} 
+0

Vladimir, in realtà ho trovato un approccio che funzionerà in modo simile alla tua soluzione. Sovrascrivo layoutSubViews nella sottoclasse scrollView e eseguo il clamping in questo modo, analogamente a ciò che si sta facendo in scrollViewDelegate. In realtà non sono sicuro di quale approccio sia preferibile. Se ricordo che il metodo delegato si attiva dopo layoutSubviews. qualche idea? – dugla

+0

Ciò causerà problemi quando il paging è abilitato, il paging non funzionerà correttamente. – moligaloo

Problemi correlati