2012-12-23 11 views
8

Sto tentando di utilizzare un UIScrollView come dispositivo di navigazione nella mia applicazione iOS. Fondamentalmente, voglio che l'applicazione carichi contenuto specifico, in base alla posizione di un UIScrollView abilitato all'impaginazione. È un po 'come una ruota di navigazione.Rilevamento della posizione UIScrollView

Attualmente, ho una vista a scorrimento di due pagine (2 * 320) e sto utilizzando il metodo delegato scrollViewDidEndDragging e contentoffset.x per caricare il contenuto appropriato. Cerco di determinare la posizione del ScrollView in quanto tale:

if (scrollView.contentOffset.x < 320) { 
    // Load content 1 
    } 
else if (scrollView.contentOffset.x >= 320) { 
    // Load content 2 
    } 

mio problema è che io o non capisco come lavorare con contentOffset o non è adatto a che fare con il mio problema. Ad ogni modo, sono bloccato. Qualcuno può farmi sapere dove ho sbagliato e/o mostrarmi un modo più efficiente per determinare la posizione di scrollview?

io sono stupido, ho dimenticato di dire quale sia il problema ... In sostanza, non riesco a tenere traccia della posizione del ScrollView. Quando passo alla seconda pagina, registra solo le modifiche se supera il limite 620 (rimbalzo verso destra). Ma quando torno alla posizione di partenza (pagina 1), registra le modifiche. In altre parole, il mio monitoraggio non è accurato.

Delegato e tutto il resto funziona correttamente, li registro!

risposta

16

E 'difficile da dire perché non hai mai specificamente menzionato qual è il problema, ma mi prendo un paio di ipotesi a questo.

Se il metodo delegato non viene chiamato a tutto ciò che serve per ricordarsi di impostare la vista di scorrimento delegato:

[myScrollView setDelegate:self];

In caso contrario, il problema con l'utilizzo scrollViewDidEndDragging per rilevare i punti di vista di scorrimento di offset è che controllerà l'offset nel punto in cui si interrompe il trascinamento che potrebbe essere all'interno delle pagine di destinazione rect o all'interno delle pagine iniziali rect. In alternativa, ti suggerisco di utilizzare scrollViewDidEndDecelerating per controllare l'offset del contenuto come verrà chiamato non appena la vista di scorrimento si arresta alla sua pagina di destinazione.

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x < 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
    else if (scrollView.contentOffset.x >= 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
} 
7

Penso che questo potrebbe aiutarti :). Con scrollViewDidScroll si ottiene sempre la posizione esatta del vostro ScrollView:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < 320) 
    { 
     // Load content 1 
    } 
    else if (scrollView.contentOffset.x >= 320) 
    { 
     // Load content 2 
    } 
} 

NSLog(@"Position: %g", scrollView.contentOffset.x);

Non dimenticare il delegato UIScrollViewDelegate nel file .h.

+0

purtroppo non risolvere il mio problema . Ho aggiunto alcune informazioni extra per chiarire qual è il problema. –

4

Ecco una soluzione per ottenere la posizione corrente (pagina) come intero Il valore: Uso scrollViewDidEndDecelerating: Methode:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    NSLog(@"%i", (int)(_scrollView.contentOffset.x/_scrollView.frame.size.width)); 
} 
0

Utilizzando UIScrollViewDelegate,

func scrollViewWillBeginDragging(scrollView: UIScrollView){ 
     print("dragging begins") 
     print("Position: \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ") 
    }