gpt4 book ai didi

ios - UIGestureRecognizer 知道调用它的对象是什么吗?

转载 作者:可可西里 更新时间:2023-11-01 03:05:27 25 4
gpt4 key购买 nike

我有一个 UIGestureRecognizer,我想在两个不同的 UIView 上工作,这两个 UIView 都在 UiViewController 的同一 View 层次结构中。 UIGestureRecognizer 的操作在每个上都大致相同,所以我希望调用相同的函数(显然会),并且我会在运行时告诉我正在处理哪个 UIView。但是怎么办?我看不到 UIGestureRecognizer 正在携带对象信息。我是否遗漏了文档中的行,或者 gestureRecognizer 是否不知道它附加到哪个对象,它正在被调用?似乎语言的重点是它会知道。

或者,也许我误解了类(class)的意图,我不应该:

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self
action: @selector(handleDblTap:)];
[viewA addGestureRecognizer: dblTap];
[viewB addGestureRecognizer: dblTap];

然后期望能够:

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer
{
if (viewA)...

如果实际上 UIGestureRecognizer 不支持同时附加到多个对象,那么,如果你知道它为什么不支持这个,你能告诉我吗?感谢您的帮助。

最佳答案

标准是每个识别器一个 View 。但是您仍然可以有效地使用一种处理程序方法。

您可以像这样实例化识别器:

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapViewA];

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
[viewB addGestureRecognizer: dblTapViewB];

然后您的处理程序方法可能类似于:

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
if (tapRec.view == viewA){
// double tap view a
} else if (tapRec.view == viewB) {
// double tap view b
}
}

关于ios - UIGestureRecognizer 知道调用它的对象是什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com