Ios 使用长按手势向UICollectionView添加菜单覆盖
我有一个UICollectionView,通常包含100-200个单元格,可以水平和垂直滚动。我试图在用户执行长按手势时提供一个简单的UIView弹出窗口,其中包含3个图标,以便用户轻松导航到UICollectionView中的两个特定单元格 我想在长按开始时弹出弹出窗口,然后用户将手指拖动到三个图标中的一个,然后释放以选择该图标 我遇到的问题是,我不知道如何让包含3个图标的视图或图标本身响应长按手势的结束 以下是UIViewController的简化:Ios 使用长按手势向UICollectionView添加菜单覆盖,ios,iphone,swift,Ios,Iphone,Swift,我有一个UICollectionView,通常包含100-200个单元格,可以水平和垂直滚动。我试图在用户执行长按手势时提供一个简单的UIView弹出窗口,其中包含3个图标,以便用户轻松导航到UICollectionView中的两个特定单元格 我想在长按开始时弹出弹出窗口,然后用户将手指拖动到三个图标中的一个,然后释放以选择该图标 我遇到的问题是,我不知道如何让包含3个图标的视图或图标本身响应长按手势的结束 以下是UIViewController的简化: class MyViewControll
class MyViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var myCollectionView: UICollectionView!
@IBAction func longTouch(_ sender: UILongPressGestureRecognizer) {
if sender.state == .began {
self.menu!.frame = CGRect(x: sender.location(in: self.view).x - 20,
y: sender.location(in: self.view).y - 75,
width: 100, height: 100)
self.menu!.isHidden = false
}
else if sender.state == .ended {
self.menu!.isHidden = true
}
}
// Popup for long touch
var menu: UIView?
// MARK: UIViewController
override func viewDidLoad() {
super.viewDidLoad()
self.initMenu()
}
// MARK:- UICollectionViewDelegate
...
// MARK:- UICollectionViewDataSource
...
// MARK:- UIScrollViewDelegate
...
private func initMenu() -> Void {
self.menu = UIView()
self.menu!.isUserInteractionEnabled = true
self.menu!.frame = CGRect(x: 0,
y: 0,
width: 100,
height: 50)
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(menuLongPressHandler))
self.menu!.addGestureRecognizer(longPress)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
self.menu!.addGestureRecognizer(tapGesture)
// There would be ImageView icons here as well, which I've left out for simplicity
self.menu!.isHidden = true
}
func menuLongPressHandler() {
print("Long Press")
}
func handleTap(sender: UITapGestureRecognizer) {
print("Tap")
}
}
在视图上方长按结束时,不会打印“点击”或“长按”。关于如何让视图捕捉长按手势的结束,有什么建议吗 我在文档中找到了为什么视图从未收到任何与LongPress相关的事件。开发者文档中写道:“UIKit会将每个触摸永久分配给包含它的视图……即使触摸位置移动到原始视图之外,触摸视图属性中的值也会保持不变。”请参阅:[link],我在文档中找到了为什么视图从未接收到任何与长按相关的事件。开发者文档中写道:“UIKit会将每个触摸永久分配给包含它的视图……即使触摸位置移动到原始视图之外,触摸视图属性中的值也会保持不变。”请参阅:[链接]