2017-04-20 1 views
1

J'ai un problème étrange. Là où j'ai un ScrollView et ContentOffset était déjà Set to it. Et j'ai fait une condition dans son délégué par le code ci-dessous.Problème ContentOffset dans UIScrollview

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 

    if(scrollOffsetY > 90 && scrollOffsetY < 150) { 

    NSLog(@"ContentOffset===>%f",ContentOffset); 

    } 
} 

La condition que j'ai écrite Fonctionne et y entrer uniquement lorsque je fais défiler lentement la fenêtre. Si je défile plus vite. Il ne pénètre pas dans ma boucle.

Comment résoudre ce problème? et obtenez la valeur exacte lorsque la condition est vraie? UIScrollView n'appelle pas de délégué pour chaque pixel défilant.

+0

déplacer votre code pour enddeclrating –

+0

scrollViewDidScroll uniquement les mises à jour pour chaque image . Si vous faites défiler rapidement le contentOffset peut sauter par très grand nombre pour chaque image. Il peut donc passer de moins de 90 à plus de 150 dans un cadre et le code ne sera jamais touché. Sans savoir quel est votre objectif, il n'y a aucun moyen de vous conseiller un moyen de résoudre ce problème. –

+0

Hi @ Anbu.Karthik, scrollViewDidEndDecelerating Déléguez uniquement les appels une fois le défilement terminé, donc lorsque je défile rapidement. La condition satisfait uniquement lorsque l'arrêt de défilement entre la valeur du contenu est compensé dans la condition If que j'ai mentionnée. Donc cela ne m'aide pas. –

Répondre

1

Au lieu de cela, il l'appelle sur chaque framehot sera affiché. Lorsque vous faites défiler rapidement, la vue déroulante peut ignorer la zone que vous souhaitez vérifier. Si vous devez prendre le moment où la zone spécifiée si l'écran vous pouvez ajouter une variable pour stocker le précédent décalage et ajouter une condition comme celui-ci:

if (previousScrollOffsetY > 150 && scrollOffsetY < 90) || (previousScrollOffsetY < 90 && scrollOffsetY > 150) { 
    NSLog(@"Skipped area") 
} 
previousScrollOffsetY = scrollOffsetY;