当用户的手指不再位于启动 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 可以识别

powershell 更正问题,而当配置文件目录不再位于文件系统上时,用户始终使用TEMP配置文件登录。这个

键盘启动时手指可滚动的 UIWebView

PanGesture 事件干扰洗涤器清理事件

使用 JavaScript 中断 iOS 滚动