0

我有一个使用 GLKView 的应用程序,没有其他 UI 元素。我没有使用 GLKViewController,也不打算使用。

我所有的应用程序设置都发生在 didFinishLaunchingWithOptions

我的 AppDelegate 接口定义为:

@interface AppDelegate : UIResponder <UIApplicationDelegate, GLKViewDelegate, UIGestureRecognizerDelegate>

作为此设置的一部分,我正在尝试设置 GestureRecognizer(Tap、Pinch 等) - 但是它们似乎没有触发。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
tapGesture.delegate = self;
tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;
tapGesture.cancelsTouchesInView = NO;
[view addGestureRecognizer:tapGesture];
tapGesture.delegate = self;

我的选择器定义为:

#pragma mark - GLKViewDelegate

- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
{
    // Code to respond to gesture here
    NSLog (@"tapGestureUpdated()");
}

从我能找到的所有示例代码中,手势识别器通常在 viewDidLoad 方法中设置。然而,似乎 GLKView 没有提供这种方法——当我尝试提供一种方法时,它没有被调用。

据推测,这是 GLKViewController 提供的东西 - 但如前所述,我没有使用 GLKViewController。

请注意,我能够覆盖 touchesBegan 方法(和朋友),并且这些选择器会按预期触发。

知道我做错了什么,或者是否有解决方法?

4

1 回答 1

0

所以,我设法让这个工作。

在 didFinishLaunchingWithOptions 的开头,我创建了一个非常简单的 UIViewController,大致如下:

static UIViewController *viewController;
viewController = [[UIViewController alloc] init];

[self.window setRootViewController:viewController];

然后我将手势添加到视图控制器,而不是视图。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
tapGesture.delegate = self;
tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;
tapGesture.cancelsTouchesInView = NO;
//[view addGestureRecognizer:tapGesture];
[viewController.view addGestureRecognizer:tapGesture];

这似乎很可疑,因为我还没有定义视图控制器的视图应该是什么。但似乎视图控制器会很高兴地接收这些事件并触发这些事件。

于 2015-07-22T21:57:42.250 回答