使用 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 > 0
。 if (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