Figured es irgendwie umgehen aus. In meinem Fall enthielt mein UIScrollView ein UII-Bild, das ich zoomen durfte. Anscheinend bedeutete dies, dass das Scrollen aktiviert war und die UIScrollView Probleme hatte, zwischen Gesten zu unterscheiden, die zwischen Blättern und Streichen (nächstes, vorheriges Bild) blättern sollten.
Der Schlüssel in meinem Fall ist das Scrollen in der Bildlaufansicht zu deaktivieren, wenn das Bild nicht gezoomt wird, und es wieder zu aktivieren, wenn es vergrößert wird. Dies bietet das erwartete Verhalten.
Der kritische Teil ist die folgende in der Scroll-Ansicht der Delegierten zu setzen:
- (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;
}
}
Ich habe auch mit Scrollen deaktiviert die Scroll-Ansicht zu initialisieren. Zoomen zu aktivieren, einfach ein Bild bieten auf einen Delegierten Anruf,
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the scroll view
return myImage;
}
Und ein paar parms in viewDidLoad für die Zoom- und Setup-Geste Erkenner gesetzt sowie
- (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];
}
wirklich hervorragend finden David. Meine Swipe-Recognizer funktionierten ebenfalls nicht. Ich gab auf und benutzte touchesBegan: mit NSNotification, aber es gab auch eine Benachrichtigung für MasterViewControllers (auf dem iPad). Ich war verschwommen und suchte nach diesem Problem. Du hast meine Zeit und Energie gespart !! Herzlichen Dank David. Mach weiter Tricks .. hab einen schönen Tag. – gopikrishnan
Danke für den Trick – iOSAppDev
Oder vielleicht in einer Zeile - scrollView.scrollEnabled = (scale! = 1.0f) – Yariv