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

时间:2015-10-26 13:49:10

标签: ios iphone uigesturerecognizer uipangesturerecognizer

我已经为幻灯片视图设置了一个平移手势,我想阻止视图滑动,如果它已滑出。所以我在检查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;
    }

    // ...
}

看起来很有效,但是如果我将视图向左滑动然后很快将它拖到相反的方向,则检查将变为无效:

screencast

请帮帮我。

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

2 个答案:

答案 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

的库

答案 1 :(得分:1)

@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帮助我解决这个问题!