没有GLKViewController

时间:2015-07-19 12:06:20

标签: ios objective-c uigesturerecognizer glkview

我有一个使用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方法(和朋友),这些选择器会按预期触发。

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

1 个答案:

答案 0 :(得分: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];

这似乎很可疑,因为我还没有定义视图控制器的视图。但似乎视图控制器很乐意接收这些事件并触发这些事件。