【问题标题】:How to limit area when sliding a view with UIPanGestureRecognizer?使用 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,而不是返回。

标签: ios iphone uigesturerecognizer uipangesturerecognizer


【解决方案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 帐户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多