UIScrollView définir par programmation contentOffset problème
Je suis entrain de créer un ImageViewer similaire à l'app Photos. J'ai un PagingScrollView qui est le point de vue d'une-vue-contrôleur (créé en loadView). Les pages sont UIScrollViews avec UIImageView des sous-vues. Tout fonctionne hunky dory jusqu'à ce que j'essaie de "skip" (définir le décalage du contenu) à un indice en plus de la première. Si je saute à-dire, l'image de "je", l'image s'affiche correctement, mais si l'utilisateur effectue un seul geste appuyez sur la contentOffset réinitialise retour à l'affichage de l'image de "0". L'erreur ne se produit pas avec d'autres gestes comme le glisser-et il n'arrive pas avec touch si vous faire un autre geste, comme le glisser-première.
C'est mon loadView de la ImageViewerController
- (void)loadView
{
//Make the outer spaging scroll view
CGRect pagingScrollViewFrame = [self frameForPagingScrollView];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
scrollView.pagingEnabled = YES;
scrollView.backgroundColor = [UIColor blackColor];
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.contentSize = [self contentSizeForPagingScrollView];
scrollView.delegate = self;
self.view = scrollView;
}
C'est de cette façon que je suis en train de définir le contenu de décalage
#define myView (UIScrollView *)self.view
[myView setContentOffset:[self contentOffsetForIndex:index]];
[..]
- (CGPoint)contentOffsetForIndex:(NSUInteger)index
{
return CGPointMake((index * (self.view.frame.size.width)), 0);
}
Je ne suis pas tout ajout de modules de reconnaissance de geste de ma part. Le robinet est d'être capturé par la pagination de défilement de la vue et il réinitialise son contentOffset retour à la page d'affichage 0. Pendant qu'il fait cela je reçois le scrollViewDidScroll délégué message
Je suis en train de vivre la même question, dans iOS 6. pour iOS 5, il fonctionne très bien. Aussi ce bug disparaître une fois que j'ai désactiver pagingEnabled ou si je désactive le défilement de l'animation. Tout savoir une meilleure façon de résoudre ce problème ?
OriginalL'auteur Mike | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
Êtes-vous de faire défiler horizontalement ou verticalement ? votre décalage logique
CGPointMake((index * (self.view.frame.size.width)), 0);
est la volonté de passer à 0 de l'axe y.MODIFIER
J'ai été un petit paresseux de l'écriture de l'approche.
Ici est l'approche que j'adopte pour trouver compenser les questions connexes:
a) par programmation décalage est réglé par setContentOffset:, scrollRectToVisible, setFrame(de UIScrollView, appelle en interne SetContentOffset). Vérifiez d'abord l'ensemble de ces dans votre code, si elles sont correctes.
b) imprimer les Journaux pour compenser en
scrollViewDidScroll:
méthode.Cela vous aidera à identifier les valeurs de décalage (dans la plupart des cas, le décalage est remplacé par un autre appel à setContentOffset: certains où dans le code, et permet de dire que le décalage actuel est (130,0) et que vous souhaitez définir l'offset (300,0), il arrive dans les étapes (si animé) , vous pouvez obtenir les journaux comme
Offset = {130,0}
Offset = {190,0}
Offset = {220,0}
Offset = {270,0}
Offset = {300,0}
Si il y a un autre appel à setContentOffset(animé), permet de dire qu'il définit décalage de (0,0), les journaux vous obtenez ressemblerait
Offset = {130,0}
Offset = {190,0}
Offset = {90, 0}
Offset = {220,0}
Offset = {60,0}
Offset = {270,0}
Offset = {30,0}
Offset = {300,0}
Offset = {0,0}
Si vous remarquez le second motif, dans les Journaux, vous pouvez être sûr qu'il existe des nations unies destiné appel à setContentOffset.
3) une Fois que vous identifier, il est un appel à involontaires appel à setContentOffset, essayez de trouver la source de celui-ci (réglage du point d'arrêt pour setContentOffset peut aider), et peuvent être traités au cas par cas. ex:
_adjustContentOffsetIfNecessary
, est une méthode interne appelé lorsque l'image est réglée pour UIScrollView. Cela peut être la raison pour (essayer de l'appliquer précédente décalage après le réglage de l'image).Espérons que cette aide (mee trop , dans l'obtention de la baisse de vote supprimée 🙂 )
vous pouvez voir l'edit , j'espère que ça aide.
merci pour le détail de la suggestion. Je n'ai pas le temps de le tester à l'instant, mais il sonne comme un solide suggestion et va le faire quand je peux. Je vais mettre à jour le fil avec les résultats quand je les ai =D
mise à jour-nous si cela résout votre problème; si non , laissez-nous savoir ce que les journaux/des inférences pour atteindre un niveau de profondeur.
OriginalL'auteur Tatvamasi
J'ai le même problème(un peu), mais ma solution à mon problème était que j'ai désactivé la
de la UIScrollView... Quand votre UIScrollview est en cours de réinitialisation à un endroit précis lors de la configuration de ContentOffset, veuillez vérifier que votre pagingEnabled est désactivé...
OriginalL'auteur Jeffrey Monte