touchesBegan没有在iOS上使用UIView?

时间:2016-10-15 05:58:37

标签: ios objective-c uiview uigesturerecognizer uitouch

我已按编程方式创建了一个UIView按钮,如此

self.paintView=[[UIView alloc]initWithFrame:CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height+100)];
[self.paintView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
[self.navigationController.view addSubview:self.paintView];

并将其添加到navigationController,以便我可以全屏查看我的UIView。

但是当我试图检测触摸它不起作用时

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if (touch.view==self.paintView && self.paintView ) {
        [UIView animateWithDuration:0.9 animations:^{
          [self.sideView setFrame:CGRectMake(-290, 0, self.sideView.frame.size.width, self.sideView.frame.size.height)];
     }];
    }

}

这种方法现在根本没有检测到。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下代码添加视图并检查:

self.paintView=[[UIView alloc]initWithFrame:CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height+100)];

[self.paintView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];


[self.window.rootViewController.view addSubview:self.paintView];//try this

通用UIViewController创建的视图填充窗口,位于SubView前面。因此,SubView无法接触。

rootViewController.view是您窗口中的单个顶级视图,并在其下添加子视图并进行检查。

答案 1 :(得分:0)

如果在视图的所有超级视图中启用了“userInteractionEnabled”NOT,则会发生这种情况。如果任何超级视图将此属性设置为false,则不会为它们或任何子视图处理触摸事件。检查是否可能出现问题。

答案 2 :(得分:0)

并提供UIView UserInteractionEnable = YES

将您的-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { }代码改为我的代码。

CGPoint point = [touch locationInView:touch.view];
 CGPoint pointOnScreen = [touch.view convertPoint:point toView:nil];
 NSLog(@"Point - %f, %f", pointOnScreen.x, pointOnScreen.y);
 NSLog(@"Touch");

答案 3 :(得分:0)

在所有超级视图上启用userInteractionEnabled。如果超级视图将此属性设置为false,则不会处理触摸子视图。

您也可以使用UITapGestureRecognizer。