我似乎在使用以下设置时遇到了一些问题:
UILongPressGestureRecognizer
(import
UIKit.UIGestureRecognizerSubclass
)的子类,以便覆盖
touchesMoved
。 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()
?
我怎样才能实现我想象的目标?谢谢你的帮助。