Несколько жестов для UIGestureRecognizer (iPhone, Cocos2d) - PullRequest
6 голосов
/ 16 июля 2011

Я использую Cocos2d для рендеринга спрайта и UIGestureRecognizer, чтобы позволить пользователю панорамировать, вращать и масштабировать спрайт.

Каждый из них работает изолированно, используя следующий код:

UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePinchFrom:)] autorelease];
[viewController.view addGestureRecognizer:pinchRecognizer];

UIRotationGestureRecognizer *rotationRecognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:layer action:@selector(handleRotationFrom:)] autorelease];
[viewController.view addGestureRecognizer:rotationRecognizer];

Однако я хочу масштабировать и вращать спрайт, если пользователь сжимает пальцы во время вращения (например, приложение «Фотографии»).К сожалению, хотя, кажется, распознаватель застревает в режиме «поворота» или «сдавливания», и не будет вызывать оба обработчика одновременно: (

Так что, в основном, я хочу знать - это делаетзначит я не могу использовать UIGestureRecognizer? Могу ли я объединить два распознавателя и выполнить все действия в одном обработчике? Нужно ли подкласс UIGestureRecognizer быть чем-то вроде "PinchAndRotateRecognizer".*

Ответы [ 2 ]

27 голосов
/ 01 августа 2011

Просто внедрите жестRecognizer: shouldRecognizeSim одновременноuallyWithGestureRecognizer: в своем делегате.

У меня настроены UIPinchGestureRecognizer, UIPanGestureRecognizer и UIRotationGestureRecognizer, и я хочу, чтобы все они работали одновременно. У меня также есть UITapGestureRecognizer, который я не хочу распознать одновременно. Все, что я сделал, это:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && ![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        return YES;
    }

    return NO;
}
0 голосов
/ 16 июля 2011

Одновременно активным может быть только один распознаватель жестов.Тот, который срабатывает первым, побеждает.Это означает, что вы не можете объединить UIPinchGestureRecognizer и UIRotationGestureRecognizer для достижения желаемого эффекта.

Вы можете попытаться создать подкласс UIGestureRecognizer, как вы сказали.Прочитайте примечания по подклассам в документации!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...