我有一个使用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方法(和朋友),这些选择器会按预期触发。
知道我做错了什么,或者是否有解决方法?
答案 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];
这似乎很可疑,因为我还没有定义视图控制器的视图。但似乎视图控制器很乐意接收这些事件并触发这些事件。