Как использовать распознаватель жестов в приложении OpenGLES на iPhone?

Хотя я знаю, как использовать распознаватель жестов в приложении на основе представления, но когда я применяю те же идеи в приложении на основе OpenGLSE: например, я добавляю TapGestureRecognizer, и когда я нажимаю на EAGLView, происходит сбой. Так может ли кто-нибудь показать мне стандартное использование UITapGestureRecognizer в приложении на основе OpenGLES?

с наилучшими пожеланиями.


person CarmeloS    schedule 03.10.2010    source источник
comment
У меня не было прямого опыта в этом, но пробовали ли вы вместо этого добавить его в родительский вид (например, окно)? Не уверен, почему, но для этого может потребоваться некоторая функциональность уровня, которая не реализована в классе CAEAGLLayer.   -  person jhabbott    schedule 03.10.2010
comment
Это очень странно, потому что у меня были представления хоста OpenGL ES, которые без происшествий реагировали на обычные события касания. Почему распознаватель жестов ведет себя иначе?   -  person Brad Larson    schedule 04.10.2010
comment
Я использовал распознаватели жестов касания для базовых UIViews и EAGLViews, и они работают точно так же. Вероятно, у вас проблема в другом месте. Что написано в вашем аварийном журнале?   -  person No one in particular    schedule 05.10.2010


Ответы (1)


Вот пример кода одной из моих игр opengles с поддержкой жестов. (Не вылетает и надеюсь, что поможет)

- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect  rect = [[UIScreen mainScreen] bounds];
    rect.size.height = 320;
    rect.size.width = 480;
    rect.origin.x = 0;
    rect.origin.y = 0;

    glView = [[EAGLView alloc] initWithFrame:rect pixelFormat:GL_RGB565_OES depthFormat:GL_DEPTH_COMPONENT16_OES preserveBackbuffer:NO];
    [self.view addSubview: glView];

    [glView addSubview: minimapView];

    if(!shell->InitApplication())
        printf("InitApplication error\n");

    [NSTimer scheduledTimerWithTimeInterval:(1.0 / kFPS) target:self selector:@selector(update) userInfo:nil repeats:YES];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(Panned:)];
    [glView addGestureRecognizer:[pan autorelease]];    

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Tapped:)];
    [glView addGestureRecognizer:[tap autorelease]];    

    UITapGestureRecognizer *dbltap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(DoubleTapped:)];
    [dbltap setNumberOfTapsRequired:2];
    [glView addGestureRecognizer:[dbltap autorelease]];

    UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressed:)];
    [glView addGestureRecognizer:[longpress autorelease]];      
}

И функция селектора

- (void) LongPressed:(UILongPressGestureRecognizer*)sender{
    NSLog(@"Long Pressed");
}
person Tyler Zale    schedule 26.01.2011