当用户的手指不再位于启动 panGesture 的视图中时,如何结束 UIPanGesture?
Posted
技术标签:
【中文标题】当用户的手指不再位于启动 panGesture 的视图中时,如何结束 UIPanGesture?【英文标题】:how can i end a UIPanGesture when the user's finger is no longer in the view where the panGesture was initiated? 【发布时间】:2015-05-21 09:15:12 【问题描述】:我是相当新的 ios 编程和 swift。
当用户的手指不再位于发起平移手势的视图中时,我不知道如何强制我的 panGesture 停止。
当用户按下该视图并拖动时,平移正确启动。但它会一直持续到用户从显示屏上的任何位置抬起手指为止。当用户的手指不再在该视图中或用户抬起手指时,我希望平底锅结束。
任何帮助将不胜感激。谢谢
【问题讨论】:
您可以随时检查手势的位置,如果不在所需的视图下,您可以取消手势。 【参考方案1】:我相信这个方法在整个平移手势中都会被调用。您只需要保留对启动平移手势的视图的引用。
- (IBAction)handlePan:(UIPanGestureRecognizer *)panRecognizer
CGPoint panPoint = [panRecognizer locationInView:self.view];
if(CGRectContainsPoint(initiatedView, panPoint))
// Carry on with pan behaviour
else
// Do nothing
CGRectContainsPoint() 参考
https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/c/func/CGRectContainsPoint
【讨论】:
感谢您的帖子。不幸的是,我对目标 C 一点也不熟悉。我确实设法使用 locationInView 和 CGRectContainsPoint 并遵循与您正在做的类似的结构。我已经展示了下面的代码。 我接受了您的回答,因为我在下面发布的内容基本上与您的建议完全一致。谢谢。【参考方案2】:根据上面有用的帖子,我设法想出了适合我的代码。
if CGRectContainsPoint(initiatedView.frame, gesture.locationInView(initiatedView)) // do stuff else gesture.enabled = false
【讨论】:
以上是关于当用户的手指不再位于启动 panGesture 的视图中时,如何结束 UIPanGesture?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pan Gesture 将 UIView 拖到 UIBezierPath 上
如何取消 LongPressGesture 以便 PanGesture 可以识别