Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.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 使superview响应子视图';在某些情况下,这是一种直觉_Ios_Iphone_Objective C_Uigesturerecognizer_Uipangesturerecognizer - Fatal编程技术网

Ios 使superview响应子视图';在某些情况下,这是一种直觉

Ios 使superview响应子视图';在某些情况下,这是一种直觉,ios,iphone,objective-c,uigesturerecognizer,uipangesturerecognizer,Ios,Iphone,Objective C,Uigesturerecognizer,Uipangesturerecognizer,我有一个滚动视图,它包含一个子视图。子视图中添加了一个panGesture 我想要什么: 我需要pangesture在子视图上工作,只有在垂直平移的情况下。如果平移是水平进行的,我希望scrollView响应平移,而不是子视图。我怎样才能做到这一点 注意:我可以通过编程方式找到水平平移的时间。既然您已经知道如何检测平移,那么在中,您需要在superview中实现委托协议,在子视图中实现委托属性,并将superview指定为子视图的委托 检测水平平移时,调用委托方法;检测垂直平移时,在子视图中实现

我有一个滚动视图,它包含一个子视图。子视图中添加了一个panGesture

我想要什么

我需要pangesture在子视图上工作,只有在垂直平移的情况下。如果平移是水平进行的,我希望scrollView响应平移,而不是子视图。我怎样才能做到这一点


注意:我可以通过编程方式找到水平平移的时间。

既然您已经知道如何检测平移,那么在中,您需要在superview中实现委托协议,在子视图中实现委托属性,并将superview指定为子视图的委托


检测水平平移时,调用委托方法;检测垂直平移时,在子视图中实现所需操作。

有几种方法可以实现此操作:

  • 根据子视图的功能,您可能可以将其替换为scrollview,并将其锁定为仅垂直滚动。(而super应仅水平滚动)
  • 如果平移手势水平移动,可以尝试将触摸信息从子视图传送到其superview。您可以使用委托模式执行此操作,或者,如果您知道superview是什么,只需在子视图中访问
    superview
    。但是,这会在两个视图之间产生强耦合,可能不应该这样做。它会很脆弱,很多人会认为它是代码气味。
  • (最佳选项)-子类
    ui手势识别器
    ,并创建您自己的手势识别器,该识别器只识别垂直移动。使用它而不是
    UIPangestureRecognitor
  • 选项3是最好的,但可能是最有效的。您将需要阅读苹果公司关于子类化的文档
    uigesturecognizer

    我还编写了自己的拖动手势识别器(类似于平移手势识别器),如果您愿意,可以使用它,或者查看一下,了解如何对
    uigesturecognizer
    进行子类化。您可以使用该类识别仅在特定方向移动的触摸,否则它将失败(这将允许其他手势识别器识别,如scrollview)。它还具有许多其他定制和收集的信息,如velocity