在顶部检测触摸的透明UIView

3

我有一个使用UISplitViewController构建的iPad项目:

  • RootViewController
  • DetailviewController

它们两者都通过手势识别器在自己的类内部检测触摸。

我想创建一个透明的UIView,位于所有类的顶部,仅检测对角线滑动(从左下角到右上角)。

因此,当检测到滑动时,我将启动一个功能否则不会添加任何内容,并且触摸应该传递到低级视图。

我尝试了这两个解决方案:

  • 在此顶部透明视图上添加GestureRecognizer,但这将隐藏所有对较低层次结构视图的触摸。 (当然启用userInteraction:YES);

另一个解决方案是像这样进行初始化

-(id)initWithFrame:(CGRect)frame
{
   self = [super initWithFrame:frame];
  if (self) {
    // Initialization code
    [self setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.01]];
    [self setUserInteractionEnabled:NO];
 }

 return self;

}

尝试使用手势检测来识别滑动操作。

  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

但是此时所有的触摸都无法被检测到。

有没有好的解决方案?

3个回答

2

我不会像您所提到的那样创建一个透明的UIView。我将向UISplitViewController的视图添加UISwipeGestureRecognizer,这已经是包含所有子视图的视图。您可以在app代理中访问该视图:

 UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;

 // attach the swipe gesture to the view that embeds the rootView and the detailView
 UISwipeGestureRecognizer* swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:splitViewController.view action:@selector(swipeUpdated:)];

感谢@tiguero的快速回答。你是对的,但并不是所有的IOS版本都支持手势识别器。我发现正确的方法应该是子类化UIWindow并覆盖- (void)sendEvent:(UIEvent *)event-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event。这样我就可以调用/或不调用[super sendEvent:event]来传递或不传递事件到UIView层次结构中。你们认为这个解决方案怎么样? - Denis Bulgarini

1

你不能只是在UISplitViewController的视图中添加一个手势识别器吗?


0
你应该了解一下容器控制器(Container Controllers)。你可以创建自己的分割视图控制器(SplitViewController),并在控制器的顶部添加第三个视图以检测滑动操作。自定义容器控制器相当简单直接,并能够给你提供很多灵活性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接