【问题标题】:View transparency and Gesture handling查看透明度和手势处理
【发布时间】:2012-06-21 16:03:31
【问题描述】:

我目前正在尝试创建一个视图来处理我的应用程序中可能发生的所有手势。

我希望这个视图透明,以便将其他视图放在下面并且它们仍然会显示(我不想让它们成为处理视图的子视图)

手势处理工作正常,直到我将视图颜色设置为“clearColor”,然后视图消失。除非我粘贴子视图,否则在这种情况下,手势只会在点击子视图时发生。

因此我的问题是:我怎样才能设法让 Gesture 事件发生在透明视图上?

【问题讨论】:

  • 如果没有记忆,不透明度设置为 0 的视图将不会响应手势。但是,我也希望能够做到这一点..
  • 您是否透明地查看 Gesture 的代理?我不确定您是在情节提要还是在代码中执行此操作,但是例如在情节提要中,您是否将控件从手势识别器拖到透明视图并将其设置为委托?我认为这应该可行。
  • @KevinHorgan Horgan:我在代码中这样做。只要视图不透明,视图就会响应良好。问题不在于对象的链接,而在于透明时认为不存在的视图
  • @Patrick :链接中给出的解决方案告诉了如果不在视图上而是在子视图上如何避免处理手势。我的问题是当视图透明且没有子视图时做出手势。

标签: iphone objective-c ios uiview uigesturerecognizer


【解决方案1】:

试试这样的。此代码将两个子视图添加到主视图“bottomView”,它具有红色背景,然后是“testView”,它是透明的覆盖在“bottomView”之上,带有点击手势识别器。如果你在“testView”中点击它会打印出 NSLog 消息。希望对您有所帮助。

-(void)viewDidLoad
{
    [super viewDidLoad];

    UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    [bottomView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:bottomView];    
    UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 150)];
    [testView setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:testView];

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] 
                                          initWithTarget:self
                                          action:@selector(handleTap:)];
    [tapRecognizer setNumberOfTapsRequired:1];
    [tapRecognizer setDelegate:testView];
    [testView addGestureRecognizer:tapRecognizer];
}

-(void)handleTap:(UITapGestureRecognizer *)sender 
{
     NSLog(@"Tapped Subview");
}

【讨论】:

  • 如何让 testView 成为 tapRecognizer 的代理?不应该是处理 viewDidLoad 的 viewController 吗?
  • 我还想提一下,这个解决方案似乎不适用于透明视图。你能确认一下吗?
猜你喜欢
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多