Swift 3:UISwipeGestureRecognizer 适用于 View 但不适用于 ViewContainer

Posted

技术标签:

【中文标题】Swift 3:UISwipeGestureRecognizer 适用于 View 但不适用于 ViewContainer【英文标题】:Swift 3: UISwipeGestureRecognizer works on View but not on ViewContainer 【发布时间】:2017-08-27 18:59:36 【问题描述】:

我对使用 Swift 3 和 Xcode 8.3.3 进行应用程序开发(虽然有编码背景)还很陌生。我找到了一些我不太了解且不知道如何在 Swift 中实现的 Objective-C 答案。

这是我所拥有的:

    Document Outline, Storyboard & Connections the OnboardingViewController Class

它的作用

swipeOnView 方法的工作原理就像一个魅力,我知道这是正确的,因为“2. Document Outline”是因为“Container View”是 View 的子视图并且不接收手势。

但是:一旦“容器视图”覆盖(或者应该 - 由于测试它是高度的一半)整个屏幕,它似乎会阻止 UIView 接收手势 -> 两种方法都呈现无用 - > 再一次……是正确的,我有点明白。

我想要它做什么

我想让 swipeOnContainerView 方法工作,但我无法弄清楚如何告诉控制器“监听”容器的视图手势而忽略“父”UIView。

【问题讨论】:

【参考方案1】:

我能够自己弄明白,方法如下:

第 1 步:为每个 GestureRecognizer 添加一个 Outlet,即 @IBOutlet var swipeLeftGestureRecognizer: UISwipeGestureRecognizer!

第 2 步:在 viewDidLoad() 中为每个 Outlet 添加一个委托,即 swipeLeftGestureRecognizer.delegate = self

第三步:将funcgestureRecognizer(_gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer)的返回值改为true

第 4 步:将引用插座连接到有问题的 UIView / SubView

第 5 步:将 IBActions 添加到每个 GestureRecognizer

完成

【讨论】:

以上是关于Swift 3:UISwipeGestureRecognizer 适用于 View 但不适用于 ViewContainer的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 3.0 转换为 Swift 2.3

xcode 8.3.3 是不是运行 swift 3.2

swift swift_optional3.swift

swift swift_optional3.swift

swift takasek / CodePiece.swiftのSwift 3.1版

我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?