gpt4 book ai didi

uiscrollview - UIScrollView 减速时 GestureRecognizers 未接收到触摸事件

转载 作者:行者123 更新时间:2023-12-04 04:59:52 38 4
gpt4 key购买 nike

我有一个水平滚动的 UICollectionView,其中填充了垂直滚动的 UITableViews(两者都是 UISCrollView 的子类)。当滚动手势开始沿任一方向滚动时,在其减速完成之前不会识别其他手势识别器。

因此,如果我从一个 tableView 水平滚动到下一个,然后尝试在减速完成之前垂直滚动 tableview,它将继续水平滚动。这非常令人沮丧。

最佳答案

您可以通过实现 UIGestureRecognizerDelegate 方法让两个手势识别器同时工作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}

但是,由于 UIScrollView 的内置手势识别器的委托(delegate) 必须 是 UIScrollView 本身,你必须继承 UIScrollView(或 UITableView,或 UICollectionView)来实现这个委托(delegate)方法。

有点违背委托(delegate)的目的。

无论如何,既然两个 UIScrollViews 都同时识别手势,我们需要一种方法来区分水平和垂直滚动手势,并确保适当的 ScrollView 处理适当的手势。

一个快速的解决方案是创建一个垂直滑动手势识别器,并要求水平 Collection View 的内置手势识别器识别失败。
UISwipeGestureRecognizer* verticalSwipe = [[UISwipeGestureRecognizer alloc] init];
verticalSwipe.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp;
verticalSwipe.delegate = self;
for (UIGestureRecognizer *gesture in self.collectionView.gestureRecognizers){
[gesture requireGestureRecognizerToFail:verticalSwipe];
}
[self.collectionView addGestureRecognizer:verticalSwipe];

然后对垂直 tableView 做同样的事情,添加一个水平滑动手势并要求它失败,以便 tableView 的内置识别器启动。
    UISwipeGestureRecognizer* horizontalSwipe = [[UISwipeGestureRecognizer alloc] init];
horizontalSwipe.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
horizontalSwipe.delegate = self;
for (UIGestureRecognizer *gesture in tableView.gestureRecognizers){
[gesture requireGestureRecognizerToFail:horizontalSwipe];
}
[tableView addGestureRecognizer:horizontalSwipe];

添加:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}

collectionView 和 tableView 都有助于进一步完善手势行为。

关于uiscrollview - UIScrollView 减速时 GestureRecognizers 未接收到触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377090/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com