Mentre so che scrollViews annidate non sono l'ideale, i nostri progettisti mi hanno fornito questa configurazione, quindi sto facendo del mio meglio per farlo funzionare. Cominciamo!Scorrimento verticale continuo tra UICollectionView nidificato in UIScrollView
Visualizza gerarchia
- UIView
- UIScrollView (scorrimento verticale solo)
- UIImageView
- UICollectionView # 1 (scorrimento orizzontale solo)
- UIImageView (diverso dal UIImageView precedente) (Solo scorrimento verticale)
- UICollectionView # 2
- UIScrollView (scorrimento verticale solo)
Nota importante
Tutti i miei punti di vista sono definite utilizzando programmatico Layout automatico. Ogni vista successiva nella gerarchia di sottoriport di UIScrollView ha una dipendenza della coordinata y sulla vista precedente.
Il problema
Per semplicità, modifichiamo nomenclatura un bit:
_outerScrollView
farà riferimento aUIScrollView
_innerScrollView
farà riferimentoUICollectionView #2
Mi piacerebbe il mio _outerScrollView
per instradare il suo evento di tocco su _innerScrollView
al raggiungimento della parte inferiore del suo contenuto Dimensione. Vorrei che accadesse il contrario quando eseguivo il backup.
Attualmente, ho il codice seguente:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat bottomEdge = [scrollView contentOffset].y + CGRectGetHeight(scrollView.frame);
if (bottomEdge >= [_outerScrollView contentSize].height) {
_outerScrollView.scrollEnabled = NO;
_innerScrollView.scrollEnabled = YES;
} else {
_outerScrollView.scrollEnabled = YES;
_innerScrollView.scrollEnabled = NO;
}
}
dove le condizioni iniziali (prima di qualsiasi scorrimento) è impostato:
outerScrollView.scrollEnabled = YES;
innerScrollView.scrollEnabled = NO;
Cosa accade?
dopo aver toccato la vista, le outerScrollView
scorre fino alla sua bordo inferiore, e poi ha un effetto elastico a causa di _outerScrollView.bounces = YES;
Se tocco di nuovo la vista, il rotolo innerScrollView fino a raggiungere il bordo inferiore. Al ritorno, lo stesso effetto di banding di gomma avviene nell'ordine inverso. Quello che voglio succedere è avere un movimento fluido tra le due sottoview.
Ovviamente, ciò è dovuto alle condizioni scrollEnabled
impostate nel condizionale nel frammento di codice. Quello che sto cercando di capire è come indirizzare la velocità/velocità di una scrollView alla successiva scrollView al raggiungimento di un bordo.
Qualsiasi assistenza in questo numero sarebbe molto apprezzata.
Altre note
- Questo non ha funzionato per me: https://github.com/ole/OLEContainerScrollView
- Sto pensando di mettere tutto nella gerarchia UIScrollView (tranne che per UICollectionView # 2) all'interno UICollectionView # 2
supplementaryView
. Non sono sicuro che funzionerebbe.
Sono stato indirizzato al seguente video da un conoscente su Twitter: http://asciiwwdc.com/2013/sessions/217. Lo sto verificando ora. – ArtSabintsev
Quanto è alto '_innerScrollView'? Intendo il suo 'frame', non il suo' contentSize'. È alto come lo schermo? O è più corto dello schermo, così quando è completamente sullo schermo, parte della vista dell'immagine è ancora visibile? Inoltre, quale layout stai usando per '_innerScrollView'? –
Ho finito per capirlo. Per rispondere alla tua domanda, la cornice di innerScrollView è la larghezza del dispositivo e circa 1/3 dell'altezza della vista principale di viewController. – ArtSabintsev