我正在尝试识别UIScrollView
中的左/右滑手势。 我尝试创建UISwipeGestureRecognizers
并将它们与滚动视图关联,这样做有时会起作用,但大部分时间不会被调用。为什么?
如何可靠地实现向左/右滑动? 我可以使用手势识别器吗?还是必须在touchesBegan/Ended
中自己处理?
谢谢
我正在尝试识别UIScrollView
中的左/右滑手势。 我尝试创建UISwipeGestureRecognizers
并将它们与滚动视图关联,这样做有时会起作用,但大部分时间不会被调用。为什么?
如何可靠地实现向左/右滑动? 我可以使用手势识别器吗?还是必须在touchesBegan/Ended
中自己处理?
谢谢
- (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 = ...
解决此问题的正确方法是添加一行代码:
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:mySwipe]
Swift版本:
scrollView.panGestureRecognizer.requireGestureRecognizerToFail(mySwipe)
Swift4 版本:
scrollView.panGestureRecognizer.require(toFail: mySwipe!);
pinchGestureRecognizer
,以使其可靠,因为我正在尝试检测多指滑动。 - Luke Rogers好的文章。
我正在做类似的事情(没有图像视图),如果内容大小小于高度(我的滚动视图只竖向滚动),我基本上必须禁用滚动。
if (scrollView.contentSize.height>scrollView.frame.size.height) {
scrollView.scrollEnabled = YES;
}
else {
scrollView.scrollEnabled = NO;
}
Class ViewController: UIViewController, UISCrollViewDelegate, UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
swipeLeft.delegate = self
swipeRight.delegate = self
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return true
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return scrollView.alwaysBounceHorizontal
}
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
// Your custom animation at the end of scrolling.
}
}