1

所以我有一个 UIVIew 承载一个图像视图,用户可以在其中放大,另一个滚动视图响应双击,当然还有滚动,还有一些按钮。我需要显示一个顶部菜单(有点像照片应用程序),当用户在视图中的任意位置单击一次时,我会显示/隐藏该菜单),我无法实现这一点,因为单击可能发生在图像视图或一个滚动视图。

所以我实施了

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

并且仅当用户单击视图上他触摸视图的某个位置而不是任何子视图时,它才起作用并完成工作!

任何帮助表示赞赏。

4

3 回答 3

1

假设您对它的子视图的所有视图使用 a然后将其添加到整个视图self.view中更有意义。UITapGestureRecongizer

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped)];
[self.view addGestureRecognizer:tap];


- (void)tapped
{
    NSLog(@"Tapped");
}

无论您点击哪个视图,使用该代码它都会注销“已点击”。然后,您将更改 tapped 方法以执行您需要执行的任何操作。

于 2013-11-03T17:50:51.513 回答
0

当您制作此菜单时,您还可以添加屏幕尺寸为 alpha = 0.1 的半透明背景,然后在使用时触摸此背景,您可以将其和菜单删除。

于 2013-11-03T17:31:34.210 回答
0

我认为在整个视图中使用 UITapGestureRecognizer 会更好。viewDidLoad 方法中的代码将是这样的。

- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    UITapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action@selector(toggleMenu)];
    [self.view addGestureRecognizer:tapGestureRecognizer];
    ...
}

- (void)toggleMenu {
    self.menu.hidden = !self.menu.hidden;
}

可能这会更好,并且使用更高级别的库而不是使用原始触摸事件总是更好。如果您有任何问题,请发表评论:)

于 2013-11-03T17:43:52.340 回答