[英]Swipe from the edge of screen, over UICollectionView
向大家问候!
我有 :
怎么了
我无法在父视图控制器中捕捉触摸,滑动事件。
我什么意思
当我尝试使用捕获触摸事件时:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {...
在View控制器中,我可以看到这样的结果。
我尝试通过添加到A_view的UIScreenEdgePanGestureRecognizer捕捉滑动
触摸视图-> touchesBegan(...)->作品
在视图上滑动-> UIScreenEdgePanGestureRecognizer->作品
触摸B视图-> touchesBegan(...)->作品
在B视图上滑动-> UIScreenEdgePanGestureRecognizer->作品
触摸C视图-> touchesBegan(...)->不起作用
在C视图上滑动-> UIScreenEdgePanGestureRecognizer->不起作用
我注意到我可以在C视图控制器中捕获触摸事件。
题
是否有可能捕获在A视图控制器(UIViewController)中的C视图(UICollectionView)上生成的滑动/触摸事件。
我的目标
我的目标是制作SideBar视图,当我尝试在C视图(UICollectionView)上捕获屏幕边缘的滑动时,它只是在内部滚动,但是我想在手指启动时打开SideBar
覆盖该函数: optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
父A View
optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
A View
并返回适当的BOOL。
请记住,对于一个将userInteractionEnabled
属性设置为true
的视图,该视图中的任何触摸/手势都不会传播到父视图( 除非shouldReceive touch
重写shouldReceive touch
,否则它会被忽略 )
我已经将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(...)
捕获方法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){...
如果需要在每个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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.