检测 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 如何识别被点击的圆圈?