Nic*_*arr 4 uigesturerecognizer ios swift
我已经为我添加了两个手势识别器UIView
:
func tap(sender: UITapGestureRecognizer){
if sender.state == .began {
print("snapping photo")
}
}
func longPress(sender: UILongPressGestureRecognizer) {
if sender.state == .began {
print("snapping video")
}
}
Run Code Online (Sandbox Code Playgroud)
当两者都设置为时state == .began
,仅longPress
触发.当我点击时.ended
,两个都开火了.
为什么在状态设置为时不点击工作.began
?
UITapGestureRecognizer
是一个离散的手势,因此,只有在识别手势时才会调用您的事件处理程序.你根本不需要检查state
(如果你的手势识别器被调用,手势被识别).当然,你将不会收到该呼叫state
的.began
.
UILongPressGestureRecognizer
是连续的手势,因此检查状态非常有用(确定手势何时开始,更改,结束等).这就是为什么你看到它呼吁state
的.began
.
有关离散与连续手势识别器的更多信息,请参阅处理UIKit手势,其中说:
手势识别器有两种类型:离散和连续.在识别手势后,离散手势识别器会准确调用您的操作方法一次.在满足其初始识别标准后,连续手势识别器会多次调用您的操作方法,并在手势事件中的信息发生变化时通知您.例如,
UIPanGestureRecognizer
每次触摸位置更改时,对象都会调用您的操作方法.
和
手势识别器的状态属性传达对象的当前识别状态.对于连续手势,手势识别器将此属性的值更新
UIGestureRecognizer.State.began
为UIGestureRecognizer.State.changed
toUIGestureRecognizer.State.ended
或toUIGestureRecognizer.State.cancelled
.
归档时间: |
|
查看次数: |
3198 次 |
最近记录: |