2012-12-23 3 views
8

J'essaie d'utiliser un UIScrollView comme périphérique de navigation dans mon application iOS. Fondamentalement, je veux que l'application charge un contenu spécifique, basé sur la position d'un UIScrollView activé pour la pagination. C'est un peu comme une roue de navigation.Détection de la position UIScrollView

Actuellement, j'ai un défilement de deux pages (2 * 320), et j'utilise la méthode de délégué scrollViewDidEndDragging et contentoffset.x pour charger le contenu approprié. J'essaie de déterminer la position du scrollview en tant que tel:

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

Mon problème est que je ne comprends pas non plus comment travailler avec contentoffset ou il ne convient pas de traiter mon problème. De toute façon, je suis coincé. Quelqu'un peut-il me dire où je me suis trompé et/ou me montrer un moyen plus efficace de déterminer la position de scrollview?

Je suis stupide, j'oublié de mentionner ce que le problème est ... En fait, je ne peux pas suivre la position de la scrollview. Quand je passe à la deuxième page, il enregistre seulement les changements si je dépasse la limite de 620 (rebond vers la droite). Mais quand je retourne à la position de départ (page 1), il enregistre les changements. En d'autres termes, mon suivi n'est pas précis. Délégué et tout le reste fonctionne bien, je les connecte!

Répondre

16

Il est difficile de dire parce que vous avez mentionné spécifiquement jamais ce que le problème est, mais je vais prendre un couple devine à elle.

Si la méthode délégué n'est pas appelé à tout ce que vous devez vous rappeler de définir le délégué de vues de défilement:

[myScrollView setDelegate:self];

Sinon, le problème avec l'utilisation scrollViewDidEndDragging pour détecter les vues de défilement offset est que il vérifie le décalage au point où vous arrêtez de faire glisser ce qui pourrait être dans les pages de destination rect, ou dans les pages de départ rect. Comme alternative, je suggère que vous utilisiez scrollViewDidEndDecelerating pour vérifier le décalage de contenu car il sera appelé dès que la vue de défilement s'arrête à sa page de destination.

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

Je pense que cela pourrait vous aider :). Avec scrollViewDidScroll vous obtenez toujours la position exacte de votre 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);

Ne pas oublier le délégué UIScrollViewDelegate dans votre fichier .h.

+0

Malheureusement ne fait résout pas mon problème . J'ai ajouté quelques informations supplémentaires pour clarifier le problème. –

4

Voici une solution pour obtenir la position actuelle (page) comme entier Valeur: Utilisation scrollViewDidEndDecelerating: Methode:

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

En utilisant UIScrollViewDelegate,

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