2012-06-27 2 views
0

Это для музыки арIOS mutipletouch последовательность с touchesBegan и touchesEnded

задача Пользователь должен нажать и удерживать экран пальцами 1, 2 и 3, с коротким временем между касаниями.

Если пользователь затем поднимает пальцы в порядке, указанном ниже (1,2,3), тогда все работает так, как ожидалось. Поэтому кажется, что флаги mulitpletouchenable, userinteractionenable и т. Д. Должны быть правильными.

Вот доклад (п числа касаний возврата, х и у места) (я редактировал выходной файл, чтобы определить пальцы 1, 2, 3

2012-06-27 07:22:36.589 Bowing[757:907] finger 1 Began n=0,x=190, y=860 
    2012-06-27 07:22:37.207 Bowing[757:907] finger 2 Began n=0,x=346, y=704 
    2012-06-27 07:22:37.875 Bowing[757:907] finger 3 Began n=0,x=580, y=708 

    2012-06-27 07:22:38.587 Bowing[757:907] finger 1 Ended n=0,x=191, y=854 
    2012-06-27 07:22:39.252 Bowing[757:907] finger 2 Ended n=0,x=346, y=722 
    2012-06-27 07:22:40.019 Bowing[757:907] finder 3 Ended n=0,x=585, y=712 

Жизнь хороша

Если пользователь поднимает пальцы в обратном порядке (3,2,1), то сообщение не посылается, пока палец 1 не поднимается, а затем сообщения для всех трех пальцев посылаются

2012-06-27 07:22:36.589 Bowing[757:907] finger 1 Began n=0,x=190, y=860 
    2012-06-27 07:22:37.207 Bowing[757:907] finger 2 Began n=0,x=346, y=704 
    2012-06-27 07:22:37.875 Bowing[757:907] finger 3 Began n=0,x=580, y=708 

    2012-06-27 07:22:38.587 Bowing[757:907] finger 1 Ended n=0,x=191, y=854 
    2012-06-27 07:22:39.252 Bowing[757:907] finger 2 Ended n=0,x=346, y=722 
    2012-06-27 07:22:40.019 Bowing[757:907] finger 3 Ended n=0,x=585, y=712 

Жизнь не очень хорошая. Чтобы отразить то, что произошло на экране, сообщения должны были прибыть в палец 3, палец 2, а затем палец 1

Вот ответы; работает так же, независимо от того, сообщения супер там или нет

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
// [super touchesBegan:touches withEvent:event]; 
    NSEnumerator *enumerator = [touches objectEnumerator]; 
    UITouch *aTouch; 
    int counter=0; 
    while ((aTouch = [enumerator nextObject])) { 
     /* code that acts on the set’s values */ 
     CGPoint where=[aTouch locationInView:nil]; 
     NSLog(@"Began n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y); 
     counter++; 
    } 

} 
// Sent to the receiver when a system event (such as a low-memory warning) cancels a touch event. 
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 

// [super touchesCancelled:touches withEvent:event]; 
    NSEnumerator *enumerator = [touches objectEnumerator]; 
    UITouch *aTouch; 
    int counter=0; 
    while ((aTouch = [enumerator nextObject])) { 
     /* code that acts on the set’s values */ 
     CGPoint where=[aTouch locationInView:nil]; 
     NSLog(@"Cancelled n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y); 
     counter++; 
    } 

} 

// Сообщает приемник, когда один или несколько пальцев поднятые из представления или окна.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
// [super touchesEnded:touches withEvent:event]; 
    NSEnumerator *enumerator = [touches objectEnumerator]; 
    UITouch *aTouch; 
    int counter=0; 
    while ((aTouch = [enumerator nextObject])) { 
     /* code that acts on the set’s values */ 
     CGPoint where=[aTouch locationInView:nil]; 
     NSLog(@"Ended n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y); 
     counter++; 
    } 

} 
+0

Проблема связана с uitableview; если респонденты находятся на виду, то он работает так, как ожидалось. –

ответ

0

Проблема заключается в том: Прикосновения закончился ждет все штрихи, которые будут закончены, поэтому, когда она закончилась все три штрихи были посланы. Решением для этого может быть nstimer, который обнаруживает [touch count]; через 1/32 временных интервала и определяет, увеличивается ли оно или уменьшается.