向大家致以问候!
我有:
有什么问题?
我无法在父视图控制器中捕捉触摸,滑动事件。
我的意思是什么?
当我尝试使用以下方式捕捉触摸事件时:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {...
<视图控制器中的我可以看到这样的结果。
我尝试通过添加到A_view的UIScreenEdgePanGestureRecognizer来抓住滑动
触摸A视图 - &gt; touchesBegan(...) - &gt;作品
在视图上滑动 - &gt; UIScreenEdgePanGestureRecognizer - &gt;作品
触摸B视图 - &gt; touchesBegan(...) - &gt;作品
在B视图上滑动 - &gt; UIScreenEdgePanGestureRecognizer - &gt;作品
触摸C视图 - &gt; touchesBegan(...) - &gt;没有工作
在C视图上滑动 - &gt; UIScreenEdgePanGestureRecognizer - &gt;没有工作
我注意到我可以在C视图控制器中捕获触摸事件。
问题
是否有可能在A视图控制器(UIViewController)中捕获在C视图(UICollectionView)上生成的滑动/触摸事件。
我的目标
我的目标是制作SideBar视图,当我尝试在C视图(UICollectionView)上抓住屏幕边缘时,它只是在里面滚动,但我想在手指启动时打开SideBar
答案 0 :(得分:0)
覆盖父optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
&amp;中的功能A View
。返回适当的BOOL。
请注意,对于userInteractionEnabled
属性设置为true
的视图,该视图中的任何触摸/手势都不会传播到父视图(除非shouldReceive touch
是超越说否则)
答案 1 :(得分:0)
我已将UIGestureRecognizerDelegate
添加到A View
viewController的父类。
class A_viewController: UIViewController,UIGestureRecognizerDelegate{...
我已将UIScreenEdgePanGestureRecognizer
添加到A view
- 父视图。
let rec = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handlePanGestRecognizer))
rec.edges = .left
rec.delegate = self
A_view.addGestureRecognizer(rec)
使用方法gestureRecognizerShouldBegin(...)
捕获边缘滑动,并调用handlePanGestRecognizer(...)
方法来生成操作。如果gestureRecognizer
是UIScreenEdgePanGestureRecognizer
而非行动。
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
{
if gestureRecognizer is UIScreenEdgePanGestureRecognizer
{
handlePanGestRecognizer(recognizer: gestureRecognizer as! UIScreenEdgePanGestureRecognizer)
}
return false
}
除recognizer.state.rawvalue
= 0之外,recognizer.state
方法触发时.begun
不是handlePanGestRecognizer()
。
func handlePanGestRecognizer(recognizer : UIScreenEdgePanGestureRecognizer){...
答案 2 :(得分:0)
如果需要在每个scrollView上识别边缘滑动手势。 (UICollectionView是一个UIScrollView)
extension UIScrollView {
open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
print("gesture recognizer should begin")
print(gestureRecognizer)
let app = UIApplication.shared.delegate as? AppDelegate
if let view = app?.window?.rootViewController?.view, !(gestureRecognizer is UIScreenEdgePanGestureRecognizer) {
let location = gestureRecognizer.location(in: view)
if location.x < view.frame.maxX * 0.05 || location.x > view.frame.maxX * 0.95 {
return false
}
}
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
}