取消已启动iOS的UIGesture

时间:2013-01-07 10:21:53

标签: ios uitableview uigesturerecognizer

我目前拥有的内容:

我的主UIViewController内有一个孩子UIViewController。在这个孩子UIViewController中,我有一个UITableView,但其中可以包含任何内容(UIScrollViewUIImageView,不同UIViews子类的组合。

在我的主UIViewController上我有GestureRecognizerDelegate,所以我在做出手势时会收到回调,如下所示:

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer endWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

@optional

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer beganWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

对于在主UIViewController之上完成的特定提示,我显示的是UIView UIImageView的小UIView。因此,基本上当从顶部到底部进行触摸时,Y <0。 100 UIView动画并显示图像,当我从屏幕上释放手指时,UIView返回到顶部。它非常类似于Apple提供的通知中心,除了我不控制它的滚动,它只显示从顶部200px。

问题:

理论上,UIImageUIView是我的等级中最高的UITableView,但当我用手指在它的区域上移动时,我可以看到{ {1}}在它下面,移动。对我来说没有意义,因为UIView UIImageView应该抓住那些手势。

我想要的是什么:

当我显示UIViewUIImage禁用childViewController上的所有互动时。

我尝试了什么:

目前我有这个:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

如果我拒绝,则UIViewUIImage甚至不显示。

如果我放置myChildViewController.view.userInteractionEnabled = NO之类的内容,由于手势已经开始,它将无效。当然,如果我在手势开始之前使用它,一切都会按预期工作。但问题是我无法使用UITableView

1 个答案:

答案 0 :(得分:1)

嗯,最终有效的是:

   -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    // Check if I am not on the Default state (UIView with the UIImageView hidden)
    if(currentState != kDefaultState)
    {
        otherGestureRecognizer.enabled = NO;
        [arrayOfDisabledGestures addObject:otherGestureRecognizer];
    }

    return YES;
}

当我最终使用UIView关闭UIImageView时,我会执行以下操作:

[arrayOfDisabledGestures makeObjectsPerformSelector:@selector(setEnabled:) withObject:@YES];

重新启用所有手势。我真的不喜欢这个解决方案,我认为应该有(并且我打赌有)其他方法。