将一个UIGestureRecognizer从一个视图控制器转发到另一个视图控制器。

4
我正在为我的一个视图控制器的视图添加一个UIGestureRecognizer
我的期望行为是当这个手势被识别时,将消除手势视图控制器并将其转发到另一个视图控制器。(我想要将手势呈现给的视图控制器)
现在当我关闭视图控制器时,捏合手势识别器(理所当然地)失败了。
有什么建议吗?谢谢。

请您详细阐述您的需求。 - iDhaval
视图控制器不响应手势识别器,视图才会响应。我会相应地更新您的问题。 - Kyle Redfearn
3个回答

1

\编辑:现在委托使用手势识别器获取参数。

您只需实现协议,例如:

@protocol ViewControllerWithGestureRecognizerDelegate

- (void)viewControllerGestureRecognizerEvent:(UIPinchGestureRecognizer *)gestureRecognizer;

@end

在将要呈现手势识别器的视图控制器中,添加委托属性。

@property (nonatomic, weak) id<ViewControllerWithGestureRecognizerDelegate> delegate;

然后将手势识别器添加到您的视图控制器中:
 UIPinchGestureRecognizer *gestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognizerAction:)];
[self addGestureRecognizer:gestureRecognizer];

在手势识别器的操作方法中调用委托方法:
 - (void)gestureRecognizerAction:(UIPichGestureRecognizer *)gestureRecognizer
 {
   [self.delegate viewControllerGestureRecognizerEvent:gestureRecognizer];
 }

在第二个视图控制器中(你想要在其中获得关于手势识别事件的通知),实现协议ViewControllerWithGestureRecognizerDelegate,并将手势识别器所在的视图控制器的委托设置为第二个视图控制器。请注意保留html标签。
 ViewControllerWithGestureRecognizer.delegate = ViewControllerInWhichYouWantToGetNotifiedAboutGestureRecognizerEvents.

这样每次手势识别器调用其中一个视图控制器的方法时,第二个视图控制器都会得到通知。

谢谢,但我的手势是连续的(UIPinchGestureRecognizer),因此我想转发整个手势而不是简单地调用一个方法。 - Devfly
我编辑了我的答案,以便第二个控制器可以访问您的手势识别器。 - Rafał Augustyniak
为什么不直接将gestureRecognizer的delegate属性设置为另一个视图控制器,并使otherVC符合UIGestureRecognizerDelegate协议呢?例如:gestureRecognizer.delegate = otherVC; - Kaan Dedeoglu
谢谢,但问题在于当识别到这个捏合手势时,我会解除视图控制器,因此捏合失败了。 - Devfly

0

实现这个委托方法不会解决您的问题吗?

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer {
    return YES;
}

0

在手势被识别之前,您需要包含delaysTouchesEnded

@property (nonatomic) BOOL delaysTouchesEnded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接