我正在进行常规的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。我并不是指单个touchesBegan,但索引永远不会超过0.我还设置第二次进入该功能的断点,并且两根手指不会触发它。
答案 0 :(得分:0)
如果要检测多个触摸(和/或区分一个手指,两个手指等触摸),请尝试使用UIPanGestureRecognizer。设置时,您可以指定最小和最大触摸次数。然后将其附加到要检测触摸的视图。当您收到来自它的事件时,您可以询问它收到了多少触摸并进行相应的分支。
这是苹果文档:
如果你这样做,你可能根本不需要使用touchesBegan / Moved / Ended方法,并且根据你设置的手势识别器的方式,touchesBegan / Moved / Ended可能永远不会被调用。
答案 1 :(得分:0)
使用[event allTouches]
代替touches
。 touches
仅代表“已更改”的触摸。来自apple docs:
如果您对自上次以来没有改变的接触感兴趣 阶段或与阶段不同的阶段 传入集合,您可以在事件对象中找到它们。图3-2 描述包含触摸对象的事件对象。得到所有 这些触摸对象,在事件对象上调用allTouches方法。
答案 2 :(得分:0)
似乎我所缺少的就是:
sViewController.view = sViewController.glView;