从 UIViewController 切换到另一个时如何保持 UILongPressGestureRecognizer 处于活动状态

Posted

技术标签:

【中文标题】从 UIViewController 切换到另一个时如何保持 UILongPressGestureRecognizer 处于活动状态【英文标题】:How do I keep a UILongPressGestureRecognizer active while switching from a UIViewController to another 【发布时间】:2015-05-20 08:28:31 【问题描述】:

在我的应用程序的某个时刻,用户可以在长按该视图后移动 UIView。这很好用。

当视图经过特定区域时,应用必须切换到另一个UIViewController。移动视图附加到这个新控制器。到目前为止一切顺利。

问题是现在移动视图不再移动(即它不跟随用户的手指):-(

似乎此问题与在不再处于活动状态的 ViewController 中触发的 UILongPressGestureRecognizer 有关。

知道我该如何处理吗?

【问题讨论】:

【参考方案1】:

当然可能需要使用 UIPanGesturerechognizer, 为什么不长按启用或添加到父视图?

【讨论】:

您的意思是在切换到新的 UIViewController 之后向视图添加 UIPanGestureRecognizer?听起来是个好主意,但我需要这个 PanGesture 已经被激活(即处于 Began 状态)。可能 ----> 开始 ----> [已更改] ----> 结束。有可能吗? 当您为视图添加平移手势识别器时,您可以从平移手势识别器实例中获取 scale 属性,所以现在您需要将 uivew 对象的中心设置为您的比例值,如前所述,您可以在目标方法中获取 sacle,您应该检查您的比例位置是否与您想要移动到下一个视图控制器或其他东西的区域匹配,当它匹配时,您只需编写一些代码来移动和添加到新视图,否则只需让用户在屏幕上玩 UIView 对象:) 希望它会帮助 HTH!编码真的很有趣 :) 我现在实际上并没有 Mac,我只是想让您了解所需功能的工作功能。 与添加的 PanGesture 一起工作正常。谢谢 :-)【参考方案2】:

您应该实现touchesBegantouchesEnded 等来处理视图的移动。这样,当您切换控制器时,您仍然可以移动该视图。

无论如何,这个想法至少看起来很奇怪,我会在你的地方重新考虑应用程序架构。

【讨论】:

是的,我完全理解这个实现可能看起来非常奇怪和丑陋,但它实际上完全符合应用程序的目的。唯一的问题是这种“冻结”。缩短手势识别器并使用触摸可能是个好主意。将进行一些测试并随时通知您。谢谢。

以上是关于从 UIViewController 切换到另一个时如何保持 UILongPressGestureRecognizer 处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 UITableViewCell 传输到另一个 UIViewController?

将数组从一个 UIViewController 传递到另一个 ViewController 返回 null

将 UIViewController 从一个 presentingViewController 移动到另一个没有动画

单击 UIButton 时从一个 UIViewController 重定向到另一个

在 UIViewController 之间切换时会发生啥类型的内存问题?

将变量从 customCell.xib 的按钮传递到另一个 UIViewController