如何在父视图中限制 UIPanGestureRecognizer

Posted

技术标签:

【中文标题】如何在父视图中限制 UIPanGestureRecognizer【英文标题】:how to limit UIPanGestureRecognizer with in parent view 【发布时间】:2013-01-23 07:49:28 【问题描述】:

您好,我在我的项目中使用了UIPanGestureRecognizer。我用下面的代码来处理UIPanGestureRecognizer

- (void)handlePan:(UIPanGestureRecognizer *)recognizer 

      CGPoint translation = [recognizer translationInView:self];
      CGFloat newX = MIN(recognizer.view.frame.origin.x + translation.x, self.frame.size.width - recognizer.view.frame.size.width);
      CGRect newFrame = CGRectMake( newX,recognizer.view.frame.origin.y, recognizer.view.frame.size.width, recognizer.view.frame.size.height);
      recognizer.view.frame = newFrame;
      [recognizer setTranslation:CGPointZero inView:self];

我的项目中有两个视图,一个是父视图(红色视图),另一个是子视图(绿色视图)。我的要求是我需要在父视图中平移子视图。我的handlePan 方法工作正常,但唯一的问题是它允许平移超出左侧的限制。它在右侧工作得很好。我需要在代码中更改什么请帮帮我。

【问题讨论】:

【参考方案1】:

你应该检查UIGestureRecognizerDelegate

实现 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 并在您不希望手势识别器接收触摸事件时返回 NO。

这个方法在 touchesBegan:withEvent: 被调用之前被调用 新触摸的手势识别器。

【讨论】:

感谢您在何​​时调用此方法? 将实现此方法的对象设置为手势识别器的委托。它应该在识别器即将处理触摸事件之前调用。如果返回 NO,则手势识别器将忽略触摸事件

以上是关于如何在父视图中限制 UIPanGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

MVC4如何在父视图单击提交时获取部分视图中的数据

在父 swiftui 视图中,我如何知道内部视图 viewmodel void 方法中的状态何时发生变化?

限制超级视图内的视图

SwiftUI:如何在父视图中初始化新的 StateObject?

安卓电视 |如何在父视图中居中 ListRow 项 (Horizo​​ntalGridView)

没有内在尺寸的自动布局