没有 GLKViewController 的 GLKView 手势识别器
GLKView gesture recognizer without a GLKViewController
我有一个使用 GLKView 的应用程序,没有其他 UI 元素。
我没有使用 GLKViewController,也不打算使用。
我所有的应用程序设置都发生在 didFinishLaunchingWithOptions
我的 AppDelegate 接口定义为:
@interface AppDelegate : UIResponder <UIApplicationDelegate, GLKViewDelegate, UIGestureRecognizerDelegate>
作为此设置的一部分,我正在尝试设置 GestureRecognizer 的(点击、捏合等)- 但它们似乎没有触发。
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 方法(和其他方法),并且这些选择器会按预期触发。
知道我做错了什么,或者是否有解决方法?
所以,我设法让它工作了。
在 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];
这似乎很可疑,因为我还没有定义视图控制器的视图应该是什么。但似乎视图控制器会很高兴地接收这些事件并触发这些事件。
我有一个使用 GLKView 的应用程序,没有其他 UI 元素。 我没有使用 GLKViewController,也不打算使用。
我所有的应用程序设置都发生在 didFinishLaunchingWithOptions
我的 AppDelegate 接口定义为:
@interface AppDelegate : UIResponder <UIApplicationDelegate, GLKViewDelegate, UIGestureRecognizerDelegate>
作为此设置的一部分,我正在尝试设置 GestureRecognizer 的(点击、捏合等)- 但它们似乎没有触发。
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 方法(和其他方法),并且这些选择器会按预期触发。
知道我做错了什么,或者是否有解决方法?
所以,我设法让它工作了。
在 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];
这似乎很可疑,因为我还没有定义视图控制器的视图应该是什么。但似乎视图控制器会很高兴地接收这些事件并触发这些事件。