TabBarController中的转换视图会中断touchesMoved

时间:2016-03-25 01:05:05

标签: ios swift touchesmoved uilongpressgesturerecogni

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

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

因此,当我长按按钮,然后移动手指时,会多次调用回调,我可以查看触摸的属性,例如数字。 (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线程移出转换方法时,抛出以下错误:

  

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

如何防止过渡的慢速同步代码弄乱touchesMoved()

我怎样才能实现我想象的目标?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我意识到动画中断触摸没有问题。因为我不正确地使用自定义的UITabBarController FoldingTabBar,可以找到here