---> 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到后面的意见所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)