0

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 メソッド (およびその仲間) をオーバーライドできることに注意してください。これらのセレクターは期待どおりに起動されます。

私が間違っていること、または回避策があるかどうか、何か考えはありますか?

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

ビューコントローラーのビューがどうあるべきかを定義していないため、これは疑わしいようです。しかし、View Controller は喜んでこれらのイベントを受け取り、これらのイベントで発火するようです。

于 2015-07-22T21:57:42.250 に答える