1

我有一个覆盖整个屏幕覆盖视图下的scrollView。在这个覆盖视图中,我有一个迷你视图。我在overlayView上附加了一个平移手势,当这个平移手势向上/向下拖动时,它激活了迷你视图的增长/缩小。我的目标是,当我到达scrollView的底部时,如果我再向上滑动一次,它会调用overlayView的平移手势来动画miniView的增长。但是,如果我从这个位置向下滑动,它会像往常一样向上滚动滚动视图。我的问题是,我无法弄清楚如何在覆盖视图中保留触摸,或者将它们传递给scrollView,它可以正常滚动。我需要能够以某种方式访问​​功能,它让我用if语句(如果scrollView.isAtCertainPoint & & swipeWasInCertainDirection),然后选择是否将运动传递给滚动视图或OverlayView的。这是我的看法层次:
-Parent查看
-----重叠视图----------滚动型
---------迷你视图(OverlayView的子视图)姿势识别器是否覆盖在ScrollView顶部的视图?

我试图重新应用大黄蜂的向上/向下轻扫,如​​果这是有帮助的。在此先感谢,我一直在寻找,但似乎无法找到解决方案。

回答

1

好吧,我想出答案我自己的问题。不知道这是否是最有效/最干净的方式,但它是获得理想效果的唯一方法。这里是我的解决办法:在我OverlayView的,我overridded

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 
    if miniView.frame.contains(point) || miniView.isOpen { 
     return true 
    } 
    //pass the tap onto other views 
    return false 
} 

这基本上让我说,如果认为应该有用户交互,这是我在一定的标准基础(水龙头是我MiniView中内部或MiniView中已扩大) 。但是,当我返回错误时,它会让触摸通过。如果您没有覆盖此方法,并且overlayView具有userInteractionEnabled,那么叠加视图会逐字地吃掉所有的触摸。使用这种方法,我仍然可以在overlayView上保留userInteractionEnabled,但决定触摸何时应该通过其他位置。

然后,在我的parentView,我添加了一个平移手势。我做了parentView一个UIGestureRecognizerDelegate,并实现了这一功能:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    //if the final page is the first page (i.e. the user only has one pic), then we don't want swiping that could interfere with the card swipe. 
    if let pan = gestureRecognizer as? UIPanGestureRecognizer { 
     let velocity = pan.velocity(in: self) 
     let isVertical = abs(velocity.x) < abs(velocity.y) 
     let isUpwards = getPanDirection(velocity: velocity) == .up 
     return (theBumbleScrollView.isAtFinalPage && isVertical && isUpwards) || theBumbleDetailView.isOpen 
    } 
    return true 
} 

这让我看到了当平移手势即将开始,并根据我返回(true或false),这将改变状态。失败的平底锅手势。基本上,取消它的手势。这是一个有用的Stack OverFlow post:Limit UIView movement to only vertical or horizontal axis

现在,我的平移手势失败了,根据我指定的标准,但我需要告诉我的scrollView,它的平移手势可以平移,如果我的自定义平移手势失败。这就是这个方便的线路进来要求(toFail:...):

let pan = UIPanGestureRecognizer(target: self, action: #selector(self.isPanning(pan:))) 
    pan.delegate = self 
    self.addGestureRecognizer(pan) 
    theScrollView.panGestureRecognizer.require(toFail: pan) 

当我设置的移动手势到父视图,我主要讲述滚动视图的平移手势(其中苹果内置的自动)如果自定义平移手势失败,它应该在下一行。

。那是让我有时滚动滚动视图我但有时能在我OverlayView的滚动解决方案。希望我能在解决这个问题的那一天拯救某个人。如果有人希望看到示例代码,我还创建了我的示例项目(视图名称不同)的github repo。 https://github.com/danielchangsoojones/Bumble-App-Clone/tree/master

相关问题