- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在开发一个 iphone(iOS 4.0 或更高版本)应用程序,在处理多个 View 之间的触摸时遇到了一些问题。我有这样的 View 结构
---> A superView
|
---> SubView - A
|
---> SubView - B (exactly on top of A, completely blocking A).
基本上我有一个 superView,以及兄弟 subview A 和 B。B 与 A 具有相同的框架,因此完全隐藏了 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/
我在 StackOverflow 和其他地方看到了很多与此类似的问题,但没有一个直接解决我的问题。我正在 THREE.js 中使用凸包生成器生成 n 边多面体。我想将方形纹理映射到每个多面体的每个面上
我是一名优秀的程序员,十分优秀!