我似乎在以下设置上遇到了一些麻烦:
我有一个UILongPressGestureRecognizer
(importUIKit.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/