在 iOS 和 macOS 中,UIGestureRecognizer
可以用来识别多种手势,比如点击、长按、滑动等等。在 iOS 中,UIGestureRecognizer
发射两次,通常是因为用户进行了两个连续的手势操作,比如先进行了一个点击操作,然后紧接着又进行了一个长按操作,系统会识别并发射两次。
要限制 UIGestureRecognizer
发射次数,可以在初始化时设置 numberOfTouchesRequired
属性为 1,即只需要一个触摸点即可触发手势,如下所示:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
tapGestureRecognizer.numberOfTouchesRequired = 1
view.addGestureRecognizer(tapGestureRecognizer)
除了设置 numberOfTouchesRequired
属性外,还可以使用 require(toFail:)
方法来让手势识别器等待一个其他的手势识别器失败后再触发,这样也可以避免多次触发手势识别器。
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(recognizer:)))
longPressGestureRecognizer.require(toFail: tapGestureRecognizer)
view.addGestureRecognizer(longPressGestureRecognizer)
这样,当用户进行长按手势时,UILongPressGestureRecognizer
会先尝试触发 handleLongPress(recognizer:)
方法,如果用户进行的是点击手势,则 UITapGestureRecognizer
会先尝试触发 handleTap(recognizer:)
方法,这样就避免了多次触发手势识别器的问题。
领取专属 10元无门槛券
手把手带您无忧上云