2

通常の OpenGL / EAGL セットアップが進行中です。

@interface EAGLView : UIView {
@public
    EAGLContext* context;
}
@property (nonatomic, retain) EAGLContext* context;
@end

@implementation EAGLView
@synthesize context;
+ (Class)layerClass {
    return [CAEAGLLayer class];
}
@end

@interface EAGLViewController : UIViewController {
@public
    EAGLView* glView;
}
@property(nonatomic, retain) EAGLView* glView;
@end

@implementation EAGLViewController
@synthesize glView;

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    for (UITouch* touch in touches) {
        CGPoint location = [touch locationInView:glView];
        int index;
        for (index = 0; index < gCONST_CURSOR_COUNT; ++index) {
            if (sCursor[index] == NULL) {
                sCursor[index] = touch;
                break;
            }
        }
    }
    [super touchesBegan:touches withEvent:event];
}

その実装には、対応する touchesEnded/Canceled/Moved も含まれます。コードは完全に機能し、適切に追跡されます。

また、すべてに適切な値を指定していることを確認します。

sViewController = [EAGLViewController alloc];

CGRect rect = [[UIScreen mainScreen] applicationFrame];
sViewController.glView = [[EAGLView alloc] initWithFrame:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)];
Assert(sViewController.glView);
sViewController.glView.userInteractionEnabled = YES;
sViewController.glView.multipleTouchEnabled = YES;
sViewController.glView.exclusiveTouch = YES;

すべて問題なくコンパイルされますが、複数の UITouch を受け取ることはありません。1 回の touchesBegan という意味ではありませんが、インデックスが 0 を超えることはありません。また、その関数に入る 2 回目のブレークポイントを設定し、2 本の指を置いてもトリガーされません。

4

3 に答える 3

0

私が行方不明だったのはこれだけだったようです:

sViewController.view = sViewController.glView;
于 2013-07-26T22:24:31.367 に答える
0

[event allTouches]の代わりに使用しtouchesます。touches「変更」されたタッチのみを表します。アップルのドキュメントから:

最後のフェーズから変更されていないタッチ、または渡されたセットのタッチとは異なるフェーズにあるタッチに関心がある場合は、イベント オブジェクトでそれらを見つけることができます。図 3-2 は、タッチ オブジェクトを含むイベント オブジェクトを示しています。これらのタッチ オブジェクトをすべて取得するには、イベント オブジェクトで allTouches メソッドを呼び出します。

于 2013-07-26T19:23:53.877 に答える
0

複数のタッチを検出する (および/または 1 本の指、2 本の指などのタッチを区別する) 場合は、UIPanGestureRecognizer を使用してみてください。設定時に、タッチの最小数と最大数を指定できます。次に、タッチを検出するビューにアタッチします。そこからイベントを受け取ると、受け取ったタッチの数を尋ねて、それに応じて分岐することができます。

アップルのドキュメントは次のとおりです。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIPanGestureRecognizer_Class/Reference/Reference.html

これを行うと、touchesBegan/Moved/Ended メソッドをまったく使用する必要がなくなり、ジェスチャ認識エンジンの設定方法によっては、touchesBegan/Moved/Ended が呼び出されない場合があります。

于 2013-07-26T18:25:12.127 に答える