如何在父视图中限制 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的主要内容,如果未能解决你的问题,请参考以下文章
在父 swiftui 视图中,我如何知道内部视图 viewmodel void 方法中的状态何时发生变化?
SwiftUI:如何在父视图中初始化新的 StateObject?