で左右のスワイプジェスチャーを認識しようとしていUIScrollView
ます。UISwipeGestureRecognizers
それらを作成してスクロールビューに関連付けようとしました。それは機能しますが、非常にまれです。呼ばれないことがほとんどです。なんで?
左/右へのスワイプを確実に機能させるにはどうすればよいですか? ジェスチャ レコグナイザーを使用できますか、それとも何らかの方法で自分で処理する必要がありますかtouchesBegan/Ended
ありがとう
で左右のスワイプジェスチャーを認識しようとしていUIScrollView
ます。UISwipeGestureRecognizers
それらを作成してスクロールビューに関連付けようとしました。それは機能しますが、非常にまれです。呼ばれないことがほとんどです。なんで?
左/右へのスワイプを確実に機能させるにはどうすればよいですか? ジェスチャ レコグナイザーを使用できますか、それとも何らかの方法で自分で処理する必要がありますかtouchesBegan/Ended
ありがとう
理解した。私の場合、UIScrollView にはズーム可能な UIImage が含まれていました。どうやらこれは、スクロールが有効になっていることを意味し、UIScrollView はスクロールとスワイプを意図したジェスチャを区別するのに問題がありました (次の前の画像)。
私の場合の鍵は、画像がズームインされていないときにスクロールビューでスクロールを無効にし、ズームインされているときに再度有効にすることです。これにより、期待される動作が提供されます。
重要な部分は、スクロール ビューのデリゲートに次を配置することです。
- (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;
}
}
また、スクロールを無効にしてスクロール ビューを初期化する必要があります。ズームを有効にするには、デリゲート呼び出しで画像を提供するだけです。
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the scroll view
return myImage;
}
そして、ズームとセットアップジェスチャーレコグナイザーのためにviewDidLoadにいくつかのパラメーターを設定します
- (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];
}
UIScrollView *scrollView = ...
UISwipeGestureRecognizer *mySwipe = ...
この問題を修正する正しい解決策は、1 行のコードを追加することです。
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:mySwipe]
迅速なバージョン:
scrollView.panGestureRecognizer.requireGestureRecognizerToFail(mySwipe)
Swift4 バージョン:
scrollView.panGestureRecognizer.require(toFail: mySwipe!);
良い投稿。
私は同様のこと(画像ビューなし)を行っていました.contentSizeが高さよりも小さい場合、基本的にスクロールを無効にする必要がありました(スクロールビューは垂直方向にのみスクロールします)。
if (scrollView.contentSize.height>scrollView.frame.size.height) {
scrollView.scrollEnabled = YES;
}
else {
scrollView.scrollEnabled = NO;
}
それは私のためにトリックをしました