Zdobione. W moim przypadku mój UIScrollView zawierał UIImage, któremu pozwoliłem na powiększanie. Najwyraźniej oznaczało to, że przewijanie jest włączone, a UIScrollView miał problem z rozróżnieniem gestów przewijania i przesunięcia (następny, poprzedni obraz).
Kluczem w moim przypadku jest wyłączenie przewijania w widoku przewijania, gdy obraz nie jest powiększony, i zmiana jego położenia, gdy jest on powiększony. Zapewnia to oczekiwane zachowanie.
Krytyczna kawałek jest wprowadzenie następujących w delegata widoku zwoju:
- (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;
}
}
Mam również zainicjować pogląd przewijania z przewijania wyłączone. Aby włączyć powiększanie, po prostu dostarczyć obraz na rozmowy delegata
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the scroll view
return myImage;
}
i ustawić kilka PARMS w viewDidLoad dla powiększania i gest setup Recognizers także
- (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];
}
Naprawdę doskonałe znalezisko Davida. moje narzędzia do rozpoznawania przeciągnięć również nie działały.i zrezygnowałem i użyłem touchBegan: z NSNotification, ale dało to powiadomienie dla MasterViewControllers również (na iPadzie) .i było zamglone, szukając tego problemu. Uratowałeś mój czas na energię! serdeczne dzięki David. Wysyłajcie posty ... Miłego dnia. – gopikrishnan
Dzięki za podstęp – iOSAppDev
A może w jednym wierszu - scrollView.scrollEnabled = (skala! = 1.0f) – Yariv