0

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

在新版本中,无论您在屏幕上按什么位置,self distance:location to:centre 都停留在 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)
4

2 回答 2

0

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

http://www.techotopia.com/index.php/An_iPhone_iOS_6_Gesture_Recognition_Tutorial

于 2013-07-02T11:45:44.177 回答
0

在我看来可疑的部分是[recognizer.view superview]

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

所以你的消息看起来基本上是这样的

CGPoint location = [recognizer locationInView:nil]; 

这将返回窗口中的位置,这也是一个有效的 CGPoint,它告诉您您是否点击了屏幕。
由于这不起作用,我猜[self distance:location to:centre]你做的事情只适用于相对于视图的坐标。也许它与旋转有关,因为旋转设备时窗口的坐标不会旋转。在不知道您的代码的情况下,我不确定问题出在哪里,但这可能无关紧要。

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

于 2013-07-02T12:05:43.823 回答