我很抱歉成为这样的初学者。我看过一些 UIGestureRecognizer 教程,并看到了一些关于 SO 的非常有用的答案,但是让这种独特的手势组合起作用让我望而却步。这是详细信息。在此先感谢您的帮助!
FooViewController,在界面生成器中有自己的 .xib,适合 iOS7 中的这个层次结构:
UIPopover
>> PageViewController
>> FooViewController
>> View (built in .xib)
>> scrollView (just a UIScrollView)
>> DrawingView (a UIView subclass that has touch drawing capabilities)
它有时也被一个子类取代,我们称之为FooViewControllerSubclass : FooViewController
。这些是我正在创建的手势:
- 当使用 FooViewControllerSubclass 代替 FooViewController 时,UIPopover 应该接收到捏合手势,导致它被关闭。否则,它不必担心夹伤。
- scrollView 应该接收两个FingerPan手势,使其滚动。
- DrawingView应该接收所有剩余的oneFingerGestures,使其绘制。
目前,1 和 3工作得很好。但是对于 2,twoFingerPanning 只是调用 1 的捏合动作。如果我注释掉那个捏动作,那么 twoFingerPanning 只会在 DrawingView 上导致 3 的 oneFinger 绘图动作。代码摘要在这里:
@implementation FooViewController
- (id)init
{
self = [super init];
[[NSBundle mainBundle] loadNibNamed:@"FooViewController" owner:self options:nil];
if (self) {
UIPanGestureRecognizer *panGR = self.scrollView.panGestureRecognizer;
panGR.minimumNumberOfTouches = 2;
}
@end
@implementation FooViewControllerSubclass
- (id)init
{
self = [super initWithWb:wb];
if (self) {
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)];
[[self view] addGestureRecognizer:pinchRecognizer];
}
return self;
}
...
- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer
{
if ([[[self nextResponder] nextResponder] isKindOfClass:([PageViewController class])]) {
[[(PageViewController*)[[self nextResponder] nextResponder] popover] dismissPopoverAnimated:YES];
}
}
@end
@implementation DrawingView
{
...
- (void)drawRect:(CGRect)rect{
//Does a bunch of basic drawing stuff using touchesBegan, touchesMoved, etc.
}
}
@end
作为旁注:我也很好奇整个[[self nextResponder] nextResponder]
部分是否是犹太洁食(因为它有效),如果不是,我应该如何将这些信息传递到层次结构中。
谢谢!