首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UIGestureRecognizer发射两次?

在 iOS 和 macOS 中,UIGestureRecognizer 可以用来识别多种手势,比如点击、长按、滑动等等。在 iOS 中,UIGestureRecognizer 发射两次,通常是因为用户进行了两个连续的手势操作,比如先进行了一个点击操作,然后紧接着又进行了一个长按操作,系统会识别并发射两次。

要限制 UIGestureRecognizer 发射次数,可以在初始化时设置 numberOfTouchesRequired 属性为 1,即只需要一个触摸点即可触发手势,如下所示:

代码语言:swift
复制
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
tapGestureRecognizer.numberOfTouchesRequired = 1
view.addGestureRecognizer(tapGestureRecognizer)

除了设置 numberOfTouchesRequired 属性外,还可以使用 require(toFail:) 方法来让手势识别器等待一个其他的手势识别器失败后再触发,这样也可以避免多次触发手势识别器。

代码语言:swift
复制
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:) 方法,这样就避免了多次触发手势识别器的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券