【问题标题】:Pass touch to another view controller (iOS)将触摸传递给另一个视图控制器(iOS)
【发布时间】:2016-08-11 04:17:11
【问题描述】:

我有一个长按手势,它会显示另一个控制器。在展示的控制器中,我有 touchesBegan()、touchesMoved() 和 touchEnded() 方法,它们检测视图控制器上的触摸。

当我长按并按住时,会显示下一个视图控制器。如果我不松开长按,并在屏幕上移动手指,则不会调用 touchesMoved() 方法,当我停止触摸时,不会调用 touchesEnded()。但是,当我松开长按触摸并再次触摸时,这些方法将被调用,因为长按手势识别器不再接收触摸,而是呈现的视图控制器接收触摸。

无论如何,呈现的屏幕是否可以识别触摸,同时仍然按下长按?如何将此长按识别器传递给下一个视图控制器?

【问题讨论】:

    标签: ios


    【解决方案1】:

    手势识别器存在于视图中。当您呈现另一个视图控制器时,该视图暂时消失了。它的消失导致了这个问题。解决方案是不实际呈现另一个视图控制器,而是假装它。在您的第一个视图控制器上描绘您的第一个视图(我们称之为 view1)。创建另一个具有确切大小的视图并将其放在顶部(我们称之为 view2)。将手势识别器放在 view2 上。用户长按屏幕。即使 view2 得到了触摸,您也可以在 view1 中找出用户触摸的位置,如下所示:

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        if let touch = touches.first {
            let position :CGPoint = touch.locationInView(view1)
        }
    }
    

    此时,您可以在 view2 后面和 view1 前面的 view3 中制作动画。这将产生进入新屏幕的效果,但是接收触摸命令的视图从未到达任何地方,并且仍在侦听命令。

    【讨论】:

    • 好答案!生病试一试!谢谢
    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 2021-12-20
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多