0

我很抱歉成为这样的初学者。我看过一些 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。这些是我正在创建的手势:

  1. 当使用 FooViewControllerSubclass 代替 FooViewController 时,UIPopover 应该接收到捏合手势,导致它被关闭。否则,它不必担心夹伤。
  2. scrollView 应该接收两个FingerPan手势,使其滚动。
  3. 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]部分是否是犹太洁食(因为它有效),如果不是,我应该如何将这些信息传递到层次结构中。

谢谢!

4

1 回答 1

0

您是否尝试过要求平移手势识别器失败以使您的捏合手势识别器成功?

(在 iOS 7 中,您可以使用UIGestureRecognizerDelegate方法来执行此操作;在 iOS 6 及更低版本中,您需要将捏合手势识别器子类化以覆盖-requireGestureRecognizerToFail:。)

于 2014-01-05T14:39:57.927 回答