检测 UIGestureRecognizer 点击并释放以显示和删除 UIView

Posted

技术标签:

【中文标题】检测 UIGestureRecognizer 点击并释放以显示和删除 UIView【英文标题】:Detect UIGestureRecognizer tap and release to show and remove UIView 【发布时间】:2016-04-19 10:41:32 【问题描述】:

当用户点击并按住我的UICollectionView 中的一个单元格时,我想在屏幕上显示一个UIView,并在用户移开手指时将其移除。 (类似于 snapchat 的东西)。

这是我的一些代码 - 有什么问题?当我按下时,UIView 会出现,但当我松开手指时它不会消失..

func handleLongPress(gestureRecognizer : UILongPressGestureRecognizer)
    // screen width and height:
    let width = UIScreen.mainScreen().bounds.size.width
    let height = UIScreen.mainScreen().bounds.size.height

    var myView = UIView(frame: CGRectMake(0, 0, width, height))
    myView.backgroundColor = UIColor.greenColor()
    myView.userInteractionEnabled = true


    if (gestureRecognizer.state == UIGestureRecognizerState.Began)
        let p = gestureRecognizer.locationInView(self.collectionView)

        if let indexPath : NSIndexPath = (self.collectionView?.indexPathForItemAtPoint(p))!
            print("Tap began")
            self.view.addSubview(myView)
        
    

    if (gestureRecognizer.state != UIGestureRecognizerState.Ended)
        return
    

    if (gestureRecognizer.state != UIGestureRecognizerState.Cancelled)
        myView.removeFromSuperview()
        print("Cancelled")
    

    let p = gestureRecognizer.locationInView(self.collectionView)

    if let indexPath : NSIndexPath = (self.collectionView?.indexPathForItemAtPoint(p))!
        //do whatever you need to do
        print("Tap released")
        myView.removeFromSuperview()
    

【问题讨论】:

这个解决方案对我有用:***.com/questions/28197079/… 【参考方案1】:

    图像显示需要 3-5 秒

    这可能是因为您使用的是UILongPressGestureRecognizer,而不是UITapGestureRecognizer

    在您的代码中,您没有处理state.Cancelled 的情况。这可能会阻止您在用户抬起手指时移除您的视图。

【讨论】:

当我松开手指时,print("Tap released") 代码运行,并在日志字段中打印出“Tap release”。编辑:我也尝试在.Cancelled 中添加 removeFromSubView,但没有工作..

以上是关于检测 UIGestureRecognizer 点击并释放以显示和删除 UIView的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit:检测 UILongPressGestureRecognizer 是不是点击了子节点

点击按钮时取消 UIGestureRecognizer?

获取手势点击哪个控件 UIGestureRecognizer

UIGestureRecognizer 如何识别被点击的圆圈?

UITextView 的 UIGestureRecognizer 防止键盘在点击时出现

UIGestureRecognizer