UIPanGestureRecognizer 重新启用滚动视图

Posted

技术标签:

【中文标题】UIPanGestureRecognizer 重新启用滚动视图【英文标题】:UIPanGestureRecognizer to re-enable scrollview 【发布时间】:2014-05-28 02:14:07 【问题描述】:

当 UIScrollView 达到特定偏移量时,我将其禁用,并希望在手势识别器中重新启用它。我唯一的问题是,直到用户触摸从屏幕上抬起,滚动视图才得到触摸。

如何在不抬起手指的情况下重新启用滚动视图?

UIScrollViews 类别:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    return YES;


    UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    gestureRecognizer.delegate = self;
    gestureRecognizer.cancelsTouchesInView = NO;
    gestureRecognizer.delaysTouchesBegan = NO;
    gestureRecognizer.delaysTouchesEnded = NO;
    [self.bodyScrollView addGestureRecognizer:gestureRecognizer];


- (void)handlePanGesture:(UIPanGestureRecognizer *)gesture


    if (gesture.state == UIGestureRecognizerStateChanged) 
        if (self.previousAssetsScrollViewOffset.y == -44
            && !self.bodyScrollView.scrollEnabled && !self.composeScrollView.scrollEnabled) 
            self.bodyScrollView.scrollEnabled = YES;
            self.composeScrollView.scrollEnabled = YES;
        
    

【问题讨论】:

【参考方案1】:

一个问题是您没有区分手势的不同阶段(阶段)。因此,您的handlePanGesture: 在整个手势中被一遍又一遍地调用,并且永远不会放弃对手势的控制,以便滚动视图可以检测到正在发生的事情。基本上,你已经“吃掉”了整个手势,所以滚动视图永远不会听到它。

但是,即使您修复了该问题,您仍然可能会遇到问题,因为一旦您的手势识别器被识别,就不会向其他手势识别器传递任何触摸,包括滚动视图的触摸。

【讨论】:

如何将触摸传递给滚动视图?正如你提到的,如果我检查状态,它仍然不能解决我的问题。 我在第二段中说过,你会遇到麻烦。这可能是不可能的,或者您可能需要做一些额外的工作来告诉两个手势识别器(您的和滚动视图的)它们可以同时识别。你还需要让你的手势识别器松开手——在began之后它不能做任何事情(现在是)。 hmm...所以你是说如果我在开始后移除我的手势?即使我删除我的手势也没有任何反应......我曾想过 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 应该允许同时进行吗?但是,我猜在 scrollEnabled = NO 之后这不再被尊重了? 可能!你得试试。不知道行不行。 不好 =( on state changed I do [self.composeScrollView removeGestureRecognizer:self.gestureRecognizer]; 但我猜触摸仍未转移。感谢提示。

以上是关于UIPanGestureRecognizer 重新启用滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

在 UIPanGestureRecognizer 和重新启用的 UIScrollView 之间连续滚动

如何在 UIPangestureRecognizer 上禁用多点触控?

如何使用两个单独的 UIBarButtonItem 禁用/启用 UIPanGestureRecognizer?

UIPanGestureRecognizer 有时无法在 iOS 7 上运行

在 UIButtons 上禁用 UIPanGestureRecognizer

UIPanGestureRecognizer 碰撞