我似乎在以下设置上遇到了一些麻烦:


我有一个UILongPressGestureRecognizerimportUIKit.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线程时,会引发以下错误:


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


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

我怎样才能实现我的预期?谢谢你的帮助。

最佳答案

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

关于ios - TabBarController中的过渡 View 中断touchesMoved,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36212550/

10-09 15:34