gpt4 book ai didi

iphone - 将 UIGesture 转发到后面的 View

转载 作者:IT王子 更新时间:2023-10-29 07:34:53 25 4
gpt4 key购买 nike

我正在开发一个 iphone(iOS 4.0 或更高版本)应用程序,在处理多个 View 之间的触摸时遇到了一些问题。我有这样的 View 结构

---> A superView 
|
---> SubView - A
|
---> SubView - B (exactly on top of A, completely blocking A).

enter image description here

基本上我有一个 superView,以及兄弟 subview A 和 B。B 与 A 具有相同的框架,因此完全隐藏了 A。

现在我的要求是这样的。

  1. subview B 应接收所有滑动和点击(单次和双次)手势。
  2. subview A 应接收所有捏合手势。

这就是我向 View 添加手势识别器的方式

UISwipeGestureRecognizer *leftSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
[leftSwipe setDirection:(UISwipeGestureRecognizerDirectionLeft)];
leftSwipe.delegate = self;
[bView addGestureRecognizer:leftSwipe];
[leftSwipe release];

UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
[rightSwipe setDirection:(UISwipeGestureRecognizerDirectionRight)];
rightSwipe.delegate = self;
[bView addGestureRecognizer:rightSwipe];
[rightSwipe release];

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
pinch.delegate = self;
[aView addGestureRecognizer:pinch];
[pinch release];

我做了一些研究,对我来说 UIGestureRecognizerDelegate 看起来很有前途,我实现了委托(delegate)方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

我为 SubView B 返回了 NO,希望底层 View 能得到这些事件。虽然没有这样的运气

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] && [gestureRecognizer view] == bView) {
NSLog(@"pinchGesture");
//bView.userInteractionEnabled = NO;
return NO;
}
return YES;
}

然后我在委托(delegate)回调(上面 block 中的注释代码)中禁用了 SubView B 的用户交互,当识别到捏合手势时,希望 SubView A 能够接收手势的剩余部分。那里也没有这样的运气..

这就是我现在的立场。我看过this问题,接受的答案涉及属性 cancelsTouchesInView。但我相信 cancelsTouchesInView 只会取消特定的触摸事件,不会转发它。

还有其他方法可以实现我的要求吗?我已准备好处理您提供的任何提示。

编辑:赏金时间

我所谓的 subView A 实际上是第 3 方库的 View 类的一个实例,它带走了所有的触摸,我无法控制它上面的任何手势。我想要左右滑动的不同实现,我想要捏合、点击等工作,就像使用这个第三方 View 一样。因此,我在 A( subview B)之上放置了一个 View 以进行左右滑动。但现在我想将其他手势事件转发到底层库。

最佳答案

如果我认为你的问题是正确的,你可以添加另一个清晰的矩形 View ,与 A 和 B View 相同,并在其上实现所有手势:当你做捏手势时,控制 subview A,当滑动和点击时(单和双)手势 - 控制 subview B。您可以通过不同的方式做到这一点:通过指针或仅将接收到的手势发送到类中的方法,从而控制您的 subview 。

例如:

UISwipeGestureRecognizer *leftSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
[leftSwipe setDirection:(UISwipeGestureRecognizerDirectionLeft)];
leftSwipe.delegate = subViewAcontroller;
[clearView addGestureRecognizer:leftSwipe];
[leftSwipe release];

UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
[rightSwipe setDirection:(UISwipeGestureRecognizerDirectionRight)];
rightSwipe.delegate = subViewAcontroller;
[clearView addGestureRecognizer:rightSwipe];
[rightSwipe release];

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
pinch.delegate = subViewBcontroller;
[clearView addGestureRecognizer:pinch];
[pinch release];

或:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
NSLog(@"pinchGesture");
[subViewBcontroller solvePinchGesture: gestureRecognizer];
}
//etc
return YES;
}

关于iphone - 将 UIGesture 转发到后面的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com