我有一个UICollectionView,它通常包含100-200个水平和垂直滚动的单元格。 当用户执行LongPress手势时,我试图提供一个带有3个图标的简单UIView弹出窗口,以使他们可以轻松导航到UICollectionView中的几个特定单元格。

我希望LongPress的开头显示弹出窗口,然后用户将手指拖到三个图标之一,然后松开以选择该图标。

我遇到的问题是我不知道如何获取包含3个图标的视图或图标本身以响应LongPress手势的结束。

这是UIViewController的简化形式:

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在视图上方结束时,不会打印“ Tap”或“ Long Press”。 关于如何获取视图以捕获LongPress手势结束的任何建议?

  ask by jmeiertx translate from so

本文未有回复,本站智能推荐:

2回复

Swift将手势添加到UIImageView吗?

现在,我正在使用Swift进行IOS项目! 我已经做了Coverflow对象。 现在,我想在单击该Coverflow中的每个图像时运行某些功能。 我试图在上面添加一些手势,但是似乎没有用。 这是我的下面的代码。 因此,如果有人知道为什么它不起作用,请帮助我,谢谢!
1回复

滑动时将手势添加到UIView或UIViewController

我对此深感困惑。 我一直在从事一个既有风景视图又有肖像视图的项目。 我从一个视图控制器切换到另一个视图控制器,第二个视图控制器有一个UIView允许自定义绘图。 但是,当我处于横向模式时(并且仅当处于横向模式时),我无法在视图中绘制(带有touchs ...功能),因为当我处于视图的左半部
1回复

禁用uicollectionview水平滚动的外部平移手势

在我的viewController中,我有一个CollectionView: mainCollectionView作为UIView子视图,具有三个可水平滚动的单元格(viewController框架大小)。 mainCollectionView还有一个panGesture ,它显示了另一个vi
3回复

将父容器的平移手势移交给嵌套的UICollectionView

我正在尝试构建一个复杂的拆分视图容器控制器,它有助于两个可变高度容器,每个容器都有自己的嵌套视图控制器。 父控制器上有一个全局平移手势,允许用户在视图容器中的任何位置拖动,并在视图之间向上和向下滑动“分隔符”。 它还有一些智能位置阈值检测逻辑,可以扩展任一视图(或重置分频器位置):
1回复

我如何向使用轻击手势识别器的图像添加活动指示器

我想知道如何向使用轻击手势识别器的图像添加活动指示器,如果用户轻按图像需要花费太长时间才能加载,例如应用程序无响应,我无法在代码中知道如何添加此acton以及何时添加用户点击图片 这是点击手势代码
2回复

使用UIGestureRecognizerState不能点击手势

我有一个应用点击手势的视图。 我希望当某人的手指在视图上时视图“收缩”,而当手指被抬起时视图又恢复正常。 我正在尝试使用UIGestureRecognizerState实现此功能,但无法正常工作。 仅在我松开手指后视图才会缩小,并且不会后退。 这是我的代码:
3回复

向UITextView添加手势会取消默认行为

我想在UITextView添加一个单击手势,这样当我的保存对话框打开时,我可以通过点击UITextView取消它。 但是,当我这样做时,它取消了textview的正常单击行为。 现在,当我单击文本而没有保存抽屉时,它什么也没做。 点击确实会使用回调方法正确触发,但会取消UITextView
1回复

使用披露指示器将链接添加到UIVewiTabelCell

我试图在用户单击Disclosure Indicator时向自定义单元格添加链接,应用程序转到其他视图取决于单元格内容我如何知道单元格的内容(如果由用户选择)