2015-07-19 95 views
0

我有一個使用GLKView的應用程序,沒有其他UI元素。 我沒有使用GLKViewController,我也不打算。沒有GLKViewController的GLKView手勢識別器

我所有的應用程序設置發生在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方法(和朋友),並按預期方式觸發這些選擇器。

任何想法我做錯了,或者如果有解決方法?

回答

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]; 

這似乎懷疑,因爲我已經沒有定義視圖控制器的看法應該是什麼。但是,視圖控制器似乎很樂​​意接受這些事件並且對這些事件發起攻擊。