0

我似乎在使用以下设置时遇到了一些问题:

  • 我有一个UILongPressGestureRecognizer( import UIKit.UIGestureRecognizerSubclass) 的子类以覆盖 touchesMoved.
  • 我有一个按钮,其中包含这个 GestureRecognizer 子类的对象,它调用一个选择器。
  • 此选择器调用的方法包含一个回调,每次调用时都会由原始 GestureRecognizer 子类touchesMoved调用。

因此,当我长按按钮,然后移动手指时,回调会被多次调用,我可以查看触摸的属性,例如数字。( touches.count)

我正在尝试根据触摸信息转换 TabBarController 的视图控制器,但是当我实现它时,(通过selectedIndex =UIView.transitionFromView())回调仅在 longPressEvent 开始时调用。(即只有一次,而不是多次。)我不确定为什么会发生这种情况。由于该按钮位于 TabBarController 中,因此不应受到转换视图的影响。

以下是一些相关代码:

GestureRecognizer 子类:

import UIKit.UIGestureRecognizerSubclass

class LongPressGestureRecongnizerSubclass: UILongPressGestureRecognizer{
    var detectTouchesMoved = false
    var toCallWhenTouchesMoved: ((touches: Set<UITouch>) -> ())?
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent) {
        if detectTouchesMoved{
            toCallWhenTouchesMoved?(touches: touches)
        } 

    }
}

识别出 longPress 时调用的委托方法。

func centerButtonLongPressed(tabBarView: TabBarView!){
    for gestureRecognizer in tabBarView.centerButton.gestureRecognizers!{
        if let longPressGestureRecognizer = gestureRecognizer as? LongPressGestureRecongnizerSubclass{
            longPressGestureRecognizer.detectTouchesMoved = true
            longPressGestureRecognizer.toCallWhenTouchesMoved = ({(touches: Set<UITouch>) -> (Void) in
                //Here I can view touches properties every time touchesMoved() is called, but not when I try to transition view here.
            })
        }
    }
}

更新:

我意识到问题在于,由于转换是同步调用的,它与touchesMoved(). 当我将转换方法移出 UI 线程时,会引发以下错误:

此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃。这将在未来的版本中导致异常。

如何防止过渡的缓慢同步代码与touchesMoved()?

我怎样才能实现我的设想?谢谢你的帮助。

4

1 回答 1

0

我意识到动画中断触摸没有问题。触摸被取消,因为我不正确地使用了自定义 UITabBarController,FoldingTabBar可以在这里找到

于 2016-03-29T01:49:15.267 回答