figured it out. Dans mon cas, mon UIScrollView contenait un UIImage que j'avais autorisé à zoomer. Apparemment, cela signifiait que le défilement était activé et que l'UIScrollView avait du mal à faire la distinction entre les gestes destinés à faire défiler et à glisser (image suivante, précédente).
La clé dans mon cas est de désactiver le défilement dans la vue défilement lorsque l'image n'est pas agrandie, et de la rouvrir quand elle est agrandie. Ceci fournit le comportement attendu.
La pièce critique est de mettre ce qui suit dans le délégué de la vue de défilement:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (scrollView.zoomScale!=1.0) {
// Zooming, enable scrolling
scrollView.scrollEnabled = TRUE;
} else {
// Not zoomed, disable scrolling so gestures get used instead
scrollView.scrollEnabled = FALSE;
}
}
Je dois aussi initialiser la vue de défilement avec défilement désactivé. Pour activer le zoom, il suffit de fournir une image sur un appel délégué,
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the scroll view
return myImage;
}
et définir quelques parms dans viewDidLoad pour les reconnaisseurs de zoom et le geste de configuration ainsi
- (void)viewDidLoad {
[super viewDidLoad];
myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);
myScrollView.maximumZoomScale = 4.0;
myScrollView.minimumZoomScale = 1.0;
myScrollView.clipsToBounds = YES;
myScrollView.delegate = self;
[myScrollView addSubview:myImage];
[self setWantsFullScreenLayout:TRUE];
myScrollView.scrollEnabled = FALSE;
UISwipeGestureRecognizer *recognizer =
[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
recognizer.delaysTouchesBegan = TRUE;
[myScrollView addGestureRecognizer:recognizer];
[recognizer release];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[myScrollView addGestureRecognizer:recognizer];
[recognizer release];
[myScrollView delaysContentTouches];
}
vraiment excellent trouver David. mes reconnaisseurs de balayage ont également échoué à travailler.J'ai abandonné et utilisé touchesBegan: avec NSNotification, mais il a également donné une notification pour MasterViewControllers (dans l'iPad) .i était flou de la recherche de ce problème. Vous avez économisé mon temps n énergie !! merci du fond du cœur David. Continuez à publier des trucs .. passez une bonne journée. – gopikrishnan
Merci pour l'astuce – iOSAppDev
Ou peut-être en une ligne - scrollView.scrollEnabled = (échelle! = 1.0f) – Yariv