我目前拥有的内容:
我的主UIViewController
内有一个孩子UIViewController
。在这个孩子UIViewController
中,我有一个UITableView
,但其中可以包含任何内容(UIScrollView
,UIImageView
,不同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。
问题:
理论上,UIImage
和UIView
是我的等级中最高的UITableView
,但当我用手指在它的区域上移动时,我可以看到{ {1}}在它下面,移动。对我来说没有意义,因为UIView
UIImageView
应该抓住那些手势。
我想要的是什么:
当我显示UIView
并UIImage
禁用childViewController
上的所有互动时。
我尝试了什么:
目前我有这个:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
如果我拒绝,则UIView
与UIImage
甚至不显示。
如果我放置myChildViewController.view.userInteractionEnabled = NO
之类的内容,由于手势已经开始,它将无效。当然,如果我在手势开始之前使用它,一切都会按预期工作。但问题是我无法使用UITableView
。
答案 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];
重新启用所有手势。我真的不喜欢这个解决方案,我认为应该有(并且我打赌有)其他方法。