iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 转发UIGesture到后面的意见大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做一个iphone(iOS 4.0或更高版本)应用程序,并有一些麻烦与多个视图之间的触摸处理。我有一个这样的视图结构

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

基本上我有一个superView,兄弟的子视图A和B. B有相同的框架A,因此完全隐藏A.

现在我的要求是这样。

> SubView B应该接收所有滑动和点击(单和双)
手势。
> SubView A应该接收所有捏合手势。

这是我如何添加手势识别器的意见

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看起来有希望,我实现委托方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

我为SubView B返回NO,希望基础视图将获得这些事件。没有这样的运气,

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

然后我禁用用户交互的SubView B里面的代理回调(注释代码在上面的块),当捏合手势被识别,希望手势的剩余部分将被SubView A接收。没有这样的运气有太多。

这就是我现在所在的地方。我已经看到this问题,其中接受的答案涉及属性cancelsTouchesInView。但我相信cancelsTouchesInView只取消一个特定的触摸事件,不要转发它。

任何其他方式来实现我的要求?我准备工作你提供的任何提示

编辑:BOUNTY时间

我所谓的subView A实际上是一个第三方库的View类的实例,它需要所有的触摸,我没有任何控制任何手势上。我想要不同的实施左右滑动,我想捏,点击等工作就像它是使用这个第三方视图。所以我把A(SubView B)顶部的视图,以获得左右滑动。但现在我想转发其他手势事件到底层图书馆。

解决方法

如果我undestand你的问题正确,你可以只是添加一个,清除视图与rect,与你A和B视图相同,并实现所有手势上:当你做捏手势,控制subView A,当滑动和点击(单和双)手势 – 控制subView B.你可以做不同的方式:通过指针或只是发送捕获手势到类中的方法,它控制您的子视图。

例如:

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到后面的意见全部内容,希望文章能够帮你解决iphone – 转发UIGesture到后面的意见所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。