Cocoa touch UITapGestureRecognitor每个值都相同

Cocoa touch UITapGestureRecognitor每个值都相同,cocoa-touch,uitapgesturerecognizer,Cocoa Touch,Uitapgesturerecognizer,我是这方面的新手,正在重新制作一个应用程序。我正在尝试使用UITapgestureRecognitor。它在初始项目文件中有效,但在新项目文件中无效。唯一的区别是旧的使用导航控制器,而我的没有 在新版本中,无论您在屏幕上按哪个位置,自距离:位置到:中心都将保持在640 有人能帮忙吗?我不知道它为什么不起作用 - (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { CGPoint location = [recogniz

我是这方面的新手,正在重新制作一个应用程序。我正在尝试使用UITapgestureRecognitor。它在初始项目文件中有效,但在新项目文件中无效。唯一的区别是旧的使用导航控制器,而我的没有

在新版本中,无论您在屏幕上按哪个位置,自距离:位置到:中心都将保持在640

有人能帮忙吗?我不知道它为什么不起作用

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
    CGPoint location = [recognizer locationInView:[recognizer.view superview]];
    CGPoint centre   = CGPointMake(512,768 / 2);

    NSInteger msg = [self distance:location to:centre];
    NSLog(@"location to centre: %d", msg);

    if ([self distance:location to:centre] < 330)
-(void)handleSingleTap:(UITapGestureRecognitor*)识别器{
CGPoint location=[recognizer locationInView:[recognizer.view superview]];
CGPoint中心=CGPointMake(512768/2);
NSInteger msg=[自身距离:位置到:中心];
NSLog(@“到中心的位置:%d”,msg);
if([自身距离:位置到:中心]<330)

参考下面的链接,您可能会得到答案。这是手势识别的一个例子


我觉得可疑的部分是
[recognizer.view superview]

将手势识别器添加到不在容器控制器(例如导航控制器)内的UIViewController中的
self.view
时,该视图没有superview。如果在没有容器视图控制器的情况下将superview消息发送到self.view,它将返回nil

所以你的信息基本上是这样的

CGPoint location = [recognizer locationInView:nil]; 
这将返回窗口中的位置,这也是一个有效的CGPoint,告诉您已点击屏幕。
由于这不起作用,我猜在
[自距离:位置到:中心]
中,您所做的某些操作仅适用于相对于视图的坐标。可能与旋转有关,因为旋转设备时窗口的坐标不会旋转。 在不了解代码的情况下,我不确定问题出在哪里,但这可能并不重要


只需将
[recognizer.view superview]
替换为
recognizer.view

[recognizer.view superview]
看起来很可疑。这是什么视图?尝试用识别器替换它。视图修复了它!非常感谢!superview是否与其他版本的导航控制器有关?