Мультитач на айфоне

Я пишу приложение для iPhone и хочу обрабатывать мультитачи. Я использую библиотеки cocos2d. Итак, я создал подкласс CCLayer и сделал его CCStandartTouchDelegate. Я почему-то не хочу использовать UIGestureRecognizer и для построения правильной логики мне нужно знать ответы на эти вопросы:

  1. Если я тапаю по экрану одним пальцем, а потом другим. Сколько касаний будет зафиксировано в ccTouchesBegan?

  2. Если я тапну по экрану двумя пальцами, то двигать буду только одним из них. Сколько касаний будет поймано в ccTouchesMoved?


person Andrew    schedule 31.10.2010    source источник


Ответы (1)


Лучшее, что можно сделать, когда у вас есть такой вопрос, — это просто реализовать обратные вызовы и в реализации зарегистрировать параметры. Например:

- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Log everything (there will be repetition because the event contains the set of touches):
    NSLog(@"ccTouchesBegan: touches = %@; event = %@", touches, event);

    // Or, just log the number of touches to simplify the output:
    NSLog(@"ccTouchesBegan: %d touches", [touches count]);

    return kEventHandled;
}

Затем просто запустите свое приложение и экспериментируйте, наблюдая за логом. Так вы узнаете больше (и быстрее), чем если спросите здесь.

Но чтобы ответить на ваши конкретные вопросы:

  1. Вы должны получить один вызов ccTouchesBegan для каждого касания (даже если первый палец все еще опущен, когда происходит второе касание). Если два пальца коснутся одновременно, вы получите один вызов с двумя касаниями.

  2. Вы будете получать повторные вызовы ccTouchesMoved каждый раз, когда перемещается один или несколько пальцев. Если двигается только один палец, каждый вызов будет передаваться одним касанием. Неподвижные пальцы не будут генерировать события, пока они не будут перемещены или подняты.

Конечно, не забудьте установить isTouchEnabled = YES для своего CCLayer, иначе вы вообще не получите никаких обратных вызовов.

person dwineman    schedule 31.10.2010