У меня есть четыре зарегистрированных UIGestureSwipeRecognizers (по одному для каждого направления), и они работают по назначению на iPhone 4/4S (iOS 4.3 и 5) и iPad 1/2 (iOS 4.NotSure и 5). Это игра, поэтому единственными разрешенными ориентациями устройства являются LandscapeRight и LandscapeLeft. Однако на iPhone 3G с iOS 4.1 распознаватели салфетки реагируют так, как будто устройство удерживается в Portrait. Другими словами, на iPhone 3G, то, что должно быть прокруткой Up в LandscapeLeft, регистрируется как правый салфетка. Фактически, все четыре распознавателя салфетки ведут себя так, как если бы устройство находилось в Portrait; однако, я проверил [[UIDevice currentDevice] orientation]
и он всегда возвращает UIDeviceOrientationLandscapeLeft
UISwipeGestureRecognizer, похоже, не уважает текущую ориентацию UIDevice на iPhone 3G
Кроме того, приложение представляет собой игру, основанную на шаблоне cocos2d 1.0.1.
Что я могу делать неправильно?
Вот мой код, где я зарегистрировать четыре салфетки распознаватели:
_swipeRecognizer_right = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightDetected)];
_swipeRecognizer_right.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:_swipeRecognizer_right];
_swipeRecognizer_right.delegate = self;
_swipeRecognizer_left = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected)];
_swipeRecognizer_left.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:_swipeRecognizer_left];
_swipeRecognizer_left.delegate = self;
_swipeRecognizer_up = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpDetected)];
_swipeRecognizer_up.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:_swipeRecognizer_up];
_swipeRecognizer_up.delegate = self;
_swipeRecognizer_down = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDownDetected)];
_swipeRecognizer_down.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:_swipeRecognizer_down];
_swipeRecognizer_down.delegate = self;
Благодарим за код @ LearnCocos2d. Вы случайно не знаете, является ли это проблемой для конкретного устройства? Мне интересно, на каком наборе устройств мне нужно преобразовать направления салфетки? – jonsibley
На самом деле, что мне действительно интересно, это то, что изменилось между iPhone 3GS и 4, что заставляет swipes уважать ориентацию устройства? Это связано с гироскопом? – jonsibley
Нет, гироскоп в этом не участвует. Я могу только предположить, что он должен иметь какое-то отношение к GameConfig.h. По умолчанию RootViewController используется для авторотации, но НЕ на устройствах 1-го и 2-го поколения. Может быть, что-то также отключает его для iPhone 3GS? В любом случае, это * должно * быть независимо от устройства или способа авторотирования приложения. – LearnCocos2D