使用 UIPanGestureRecognizer 滑动视图时如何限制区域?

Posted

技术标签:

【中文标题】使用 UIPanGestureRecognizer 滑动视图时如何限制区域?【英文标题】:How to limit area when sliding a view with UIPanGestureRecognizer? 【发布时间】:2015-10-26 13:49:10 【问题描述】:

我已经为滑动视图设置了平移手势,如果视图滑出,我想防止它滑动。所以我在检查UIGestureRecognizerStateChanged时添加了这个

CGPoint velocity = [(UIPanGestureRecognizer *)sender velocityInView:self.view];

if (sender.state == UIGestureRecognizerStateChanged) 
    CGPoint velocity = [(UIPanGestureRecognizer *)sender velocityInView:self.view];

    if (self.slideMenuView.frame.origin.x > 0 && velocity > 0) 
        return;
    

    // ...

似乎可以,但是如果我将视图向左滑动然后很快将其拖动到相反的方向,检查将变得无效:

请帮帮我。

更新:我已将项目上传到 GitHub:Vayn/ice

【问题讨论】:

您是否尝试过使用if (self.slideMenuView.frame.origin.x > 0 && velocity > 0) 之类的条件if (self.slideMenuView.frame.origin.x > 0 || velocity > 0),...? 使用translation而不是velocity来检查条件怎么样? @ChengYuHsu 不行,不行。 @anhtu 我试过了,幻灯片视图已经冻结 ... 是的,因为velocity > 0if (self.slideMenuView.frame.origin.x > 0) self.slideMenuView.frame = CGRectMake(0,self.slideMenuView.frame.origin.y,self.slideMenuView.frame.size.width,self.slideMenuView.frame.size.height 怎么样。我的意思是,您可以尝试重置它的 origin.x = 0,而不是返回。 【参考方案1】:

你可以试试。

if (self.view.frame.origin.x > 0) 
    sender.view.frame = CGRectMake(0, sender.view.frame.origin.y,
                                   sender.view.frame.size.width, sender.view.frame.size.height);
    return;

我不确定。我下载了你的项目。但无法构建

找不到 -lSDCycleScrollView 的库

【讨论】:

啊,我用的是第三方库和CocoaPods,建项目前需要pod install 我试过了。幻灯片菜单视图像以前一样被冻结。 @Vayn 我现在无法设置。如果我有空闲时间,我会尝试一下。我得走了。对不起。真的很想帮你。 谢谢。我想我可以在检测手势之前在某处放置一个标志didSlidOut【参考方案2】:

在@PhilCai1993的帮助下,我们终于找到了解决这个问题的方法:

if (sender.state == UIGestureRecognizerStateChanged) 
    // ...

    // Add the check at the end of the block
    if (sender.view.frame.origin.x >= 0) 
        sender.view.frame = CGRectMake(0, sender.view.frame.origin.y,
                                       sender.view.frame.size.width, sender.view.frame.size.height);
    

更新滑动菜单视图的框架后,只需检查块末尾的滑动菜单视图的位置。

感谢@anhtu 帮我解决了这个问题!

【讨论】:

@anhtu 非常感谢!你有推特吗?我想跟着你:D 对不起,我不使用 Twitter。 : )。我的Skype:“anhtudev”。如果您想讨论某事。 没关系。我很快就会注册一个 Skype 帐户。

以上是关于使用 UIPanGestureRecognizer 滑动视图时如何限制区域?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 UIPanGestureRecognizer 移动对象时会有延迟?

UIPanGestureRecognizer ***视图未获取事件,子视图使用它们

在 UITableView 上滑动删除以使用 UIPanGestureRecognizer

在 UIPanGestureRecognizer 中使用velocityInView

使用 UIPanGestureRecognizer 拖动 + 旋转触摸下车

使用 UIPanGestureRecognizer 移动和缩放 UIView