gpt4 book ai didi

ios - UIPanGestureRecognizer 不接受 UIView 目标

转载 作者:行者123 更新时间:2023-11-29 02:33:42 25 4
gpt4 key购买 nike

我有一个简单的演示应用程序,我试图在其中动态添加一个 UITextView,它后面直接有一个 UIView(作为背景)。但是每次我编译和测试平移手势时,我都会得到这个错误:

-[UIView detectPan:]: 无法识别的选择器发送到实例 0x17e7fc30

这是我创建 UIView 并分配 UIPanGesture 的示例代码:

CGRect textFieldFrame = CGRectMake(0, 44, 320, 44);

// Create a TextField
UITextField *textField = [[UITextField alloc] initWithFrame:textFieldFrame];
textField.userInteractionEnabled = NO;
textField.layer.zPosition = 100001;
[self.view addSubview:textField];

// Create the Text Background View
UIView *textBG = [[UIView alloc] initWithFrame:textFieldFrame];
textBG.layer.zPosition = 100000;
[self.view addSubview:textBG];

self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:textBG action:@selector(detectPan:)];

还有我的 detectPan 方法:

-(void)detectPan:(UIPanGestureRecognizer *)gr {
NSLog(@"inside detectPan");
}

我在实现过程中是否遗漏了某些步骤?我发誓这种完全相同的方法在过去对我有用,但现在它根本不起作用。非常困惑!

最佳答案

这是一个很常见的问题,因为很容易被-initWithTarget:action:中的“target”这个词误导

尝试将 initWithTarget:textBG 更改为 initWithTarget:self 并且应该可以正常工作。

因此您的新代码行将如下所示:

self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(detectPan:)];

人们被“目标”这个词绊倒的原因是因为他们认为“目标”是“我想用我的自定义代码定位的对象”(即“我想在屏幕上拖动的 UIView” ),相反,他们应该将 UIPanGestureRecognizer 的目标视为“当前包含我要在屏幕上拖动的对象的 UIView”,或者换句话说“拥有我想在其中使用的坐标空间的 UIView为了计算平移手势翻译"

像这样:

-----------------------|                     ||  Containing UIView -|-----> "THE TARGET"|                     |       The "target" owns the x,y coordinate space where the|    ------------     |       UIPanGestureRecognizer will calculate the movements of|    |          |     |       your "drag" or "pan" across the screen.|    |  UIView  |     ||    | (textBG) |     ||    |          |     ||    ------------     ||                     |-----------------------

因此,在您的示例中,您的应用程序崩溃是因为您将 textBG 设置为目标,并将 detectPan 设置为操作,这基本上是说“当在 textBG 对象中检测到平移手势时,调用 detectPan 方法textBG 对象”,但是您在 textBG 对象上没有 detectPan 方法,您只有一个存在于 textBG 父对象(即“self”)中的 detectPan 方法。这就是为什么在这种情况下您会收到 unrecognized selector sent to instance 错误,因为您的程序找不到与您的 textBG 对象关联的 -detectPan: 方法。

希望这对您有所帮助!

关于ios - UIPanGestureRecognizer 不接受 UIView 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609262/

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