Почему UIViewController трогает Beg, touchesMoved & touchchesEnded вызывается только тогда, когда первое из двух касаний начинается, двигается или заканчивается

У меня проблема с обработкой более одного касания с помощью методов touchesBegan / Moved / Ended UIViewController. Я также вижу такое же поведение в приложении cocos2d (используя ccTouchesBegan / Moved / Ended), поэтому я думаю, что этот вопрос можно применить ко всей обработке касаний в iOS. Я поместил код, который я использую, ниже, а затем результаты, которые я вижу.

Все методы реализованы в подклассе UIViewController.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Began");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Moved");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Ended");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

-(void)logTouchesFor:(UIEvent *)event
{
    int count = 1;

    for (UITouch *touch in event.allTouches)
    {
        CGPoint location = [touch locationInView: self.view];

        NSLog(@"%d: (%.0f, %.0f)", count, location.x, location.y);
        count++;
    }
}

Теперь для интересных результатов ...

Single Touches Work as Expected

Допустим, я касаюсь экрана большим пальцем. Я вижу в окне вывода, что touchBegan был вызван, как и ожидалось. Я двигаю большим пальцем, и меня трогают. Затем я убираю большой палец с экрана и прикасаюсь к закругленному вызову. Все это, как и ожидалось, я включил в вопрос в качестве контрольного случая - просто чтобы было ясно, что мой контроллер представления получает события касания, и я не пропустилvc.view.userInteractionEnabled = YES в любом месте.

The Second Touch Doesn't Cause touchesBegan, touchesMoved or touchesEnded to be called

Это самый интересный. Допустим, я касаюсь экрана большим пальцем (называется touchsBegan) и держу его неподвижно на экране. Затем я касаюсь где-то еще на экране указательным пальцем, удерживая большой палец на том же месте. Прикосновения Бегана не называются. Затем, скажем, я двигаю указательным пальцем, сохраняя при этом большой палец абсолютно неподвижным (это может быть сложно, но возможно). TouchesMoved не называется. Затем я убираю указательный палец с экрана. TouchesEnded не называется. Наконец, я двигаю большим пальцем, и происходит касание Moved. Затем я убираю большой палец с экрана и прикасаюсь к закруглению.

Просто чтобы быть ясно: я установилself.view.multipleTouchEnabled = YES в моемviewDidLoad метод.

Information About the Second Touch is Available, Providing the First Touch Moves

На этот раз я делаю что-то очень похожее на пример, приведенный выше. Я касаюсь экрана большим пальцем, затем указательным пальцем, сохраняя при этом большой палец. TouchesBegan вызывается, когда мой большой палец касается экрана, но не мой указательный палец. Теперь я двигаю большим пальцем, и touchsMoved называется. Мало того, но есть два касания в массиве event.allTouches (и да, второе касание - то, где я ожидал бы, что это будет). Это означает, что система знает, что я коснулся экрана во второй раз, но я не получаю уведомления о методах обработки касаний на моем контроллере представления.

How Can I be Notified About Changes to the Second Touch?

Я действительно хотел бы иметь возможность реагировать на изменения местоположения или состояния второго касания по мере их возникновения, а не когда первое касание также изменяется. Большую часть времени это не будет проблемой, потому что очень трудно изменить одно касание, не влияя на другое, но у меня есть по крайней мере одна ситуация, когда это может быть проблемой. Я что-то упускаю из виду? Кто-нибудь еще заметил это поведение или были проблемы с ним?

В случае, если это уместно, я использую iPhone 3GS под управлением iOS 5.1.