Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从屏幕边缘在UICollectionView上滑动_Ios_Swift_Uicollectionview_Uikit_Swipe - Fatal编程技术网

Ios 从屏幕边缘在UICollectionView上滑动

Ios 从屏幕边缘在UICollectionView上滑动,ios,swift,uicollectionview,uikit,swipe,Ios,Swift,Uicollectionview,Uikit,Swipe,向大家致意 我有: 视图-是UIViewController的主视图 B视图-是视图的UIView和子视图(A_view.addsubview(B_view)) C视图-是视图的UICollectionView和子视图 什么问题? 我无法在父视图控制器中捕捉触摸、滑动事件 class A_viewController: UIViewController,UIGestureRecognizerDelegate{... 我是什么意思? 当我尝试使用以下方式捕捉触摸事件时: override f

向大家致意

我有:

  • 视图-是UIViewController的主视图
  • B视图-是视图的UIView和子视图(A_view.addsubview(B_view))
  • C视图-是视图的UICollectionView和子视图
什么问题?

我无法在父视图控制器中捕捉触摸、滑动事件

class A_viewController: UIViewController,UIGestureRecognizerDelegate{...
我是什么意思?

当我尝试使用以下方式捕捉触摸事件时:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {...
override func touchsbegind(touch:Set,with event:UIEvent?{。。。
在视图控制器中,我可以看到这样的结果

我尝试通过添加到视图中的UIScreenedGepangestureRecognitor捕捉刷卡信息

触摸视图->触摸开始(…)->工作

在视图上轻扫->UIScreenedGePangestureRecognitor->works

触摸B视图->触摸开始(…)->工作

轻扫B视图->UIScreenedGePangestureRecognitor->works

触摸C视图->触摸开始(…)->不工作

在C视图上滑动->UIScreenedGePangestureRecognitor->不工作

我注意到我可以在C视图控制器中捕捉触摸事件

class A_viewController: UIViewController,UIGestureRecognizerDelegate{...
问题

是否有可能在视图控制器(UIViewController)中捕获在C视图(UICollectionView)上生成的滑动/触摸事件

我的目标


我的目标是创建边栏视图,当我试图捕捉到在屏幕边缘扫过C视图(UICollectionView)时,它只是在内部滚动,但我想在手指启动时打开边栏,覆盖函数:
可选函数手势识别器(\uGestureRecognizer:UIGestureRecognizer,应接收触摸:UITouch)->Bool
在父视图
中返回适当的Bool。
请记住,对于
userInteractionEnabled
属性设置为
true
的视图,该视图中的任何触摸/手势都不会传播到父视图(除非
shouldReceive touch
被覆盖以表示其他)

  • 我已将
    UIgestureRecognitizerDelegate
    添加到视图
  • viewController的父类中

    class A_viewController: UIViewController,UIGestureRecognizerDelegate{...
    
  • 我已将
    uiscreenedgepangestureerecognizer
    添加到
    视图
    -父视图中

    let rec = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handlePanGestRecognizer))
    rec.edges = .left
    rec.delegate = self
    A_view.addGestureRecognizer(rec)
    
  • 使用方法
    gesturecognizer应开始(…)
    catch边缘滑动,并调用
    handlePangestregnizer(…)
    方法生成操作。如果
    gesturecognizer
    uiscreenedgepangesturecognizer
    ,则执行操作

    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
    {
         if gestureRecognizer is UIScreenEdgePanGestureRecognizer
         {
             handlePanGestRecognizer(recognizer: gestureRecognizer as! UIScreenEdgePanGestureRecognizer)
         }
         return false
    }
    
  • 除此之外,
    recognizer.state.rawvalue
    =0,因此当触发
    handlePangestrerecognizer()
    方法时,
    recognizer.state
    不是
    开始的

    func handlePanGestRecognizer(recognizer : UIScreenEdgePanGestureRecognizer){...
    

  • 如果需要在每个滚动视图上识别边缘滑动手势。(UICollectionView是UIScrollView)

    扩展UIScrollView{ 打开覆盖函数GestureRecognitzer应开始(\uGestureRecognitzer:UIGestureRecognitzer)->Bool{ 打印(“手势识别器应开始”) 打印(手势识别器) 将app=UIApplication.shared.delegate设为AppDelegate 如果let view=app?.window?.rootViewController?.view,!(手势识别器是UIScreenedGepangestureRecognitor){ let location=手势识别器。位置(在:视图中) 如果location.xview.frame.maxX*0.95{ 返回错误 } } 返回super.gestureRecognitizerShouldBegin(gestureRecognitizer) } }