Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将某些手势传递给uiscrollview,将其他手势传递给其内容?_Ios_Uiscrollview_Uigesturerecognizer_Uipangesturerecognizer_Uipinchgesturerecognizer - Fatal编程技术网

Ios 将某些手势传递给uiscrollview,将其他手势传递给其内容?

Ios 将某些手势传递给uiscrollview,将其他手势传递给其内容?,ios,uiscrollview,uigesturerecognizer,uipangesturerecognizer,uipinchgesturerecognizer,Ios,Uiscrollview,Uigesturerecognizer,Uipangesturerecognizer,Uipinchgesturerecognizer,很抱歉我是个初学者。我看了很多UIGestureRecognitor教程,也看到了一些类似的教程,但让这种独特的手势组合起作用让我难以理解。详情如下。提前感谢您的帮助 FooViewController在interface builder中具有自己的.xib,适合iOS7中的此层次结构: UIPopover >> PageViewController >> FooViewController >> View (built in .xib)

很抱歉我是个初学者。我看了很多UIGestureRecognitor教程,也看到了一些类似的教程,但让这种独特的手势组合起作用让我难以理解。详情如下。提前感谢您的帮助

FooViewController在interface builder中具有自己的.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时,UIPover应接收到挤压手势,使其关闭。除此之外,它不必担心夹伤
  • scrollView应接收到twoFingerPan的 滚动
  • DrawingView应接收所有剩余的OneFingers手势,导致 这是画画
  • 目前,1和3工作得很好。但对于2,twoFingerPanning只是调用1的挤压动作。如果我注释掉那个收缩动作,那么twoFingerPanning只会导致3在DrawingView上的单指绘制动作。代码摘要如下:

    @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]
    部分是否符合犹太教(因为它是有效的),如果不是,我应该如何将这些信息传递到层次结构中


    谢谢

    您是否尝试过要求您的平移手势识别器失败,以使您的按压手势识别器成功


    (在iOS 7中,您可以使用
    UIgestureRecognitizerDelegate
    方法来实现这一点;在iOS 6及更低版本中,您需要对捏手势识别器进行子类化,以覆盖
    -requiregestureRecognitizerToFail:

    没有足够的信息来说明问题所在。至少,创建平移手势识别器时需要自定义滚动视图。谢谢Petro。实际上,我没有自定义的滚动视图,它只是UIScrollView。我对它进行了编辑,以明确这一点。谢谢,