2012-05-08 3 views
0

У меня есть некоторые мультитач вопросыMultitouch и аудио

это одна часть моего кода в файле .m

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 
CGPoint pt = [touch locationInView:self.view]; 

if(pt.x>634 && pt.x<733 && pt.y >64 && pt.y<145) 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"si" ofType:@"mp3"]; 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    theAudio.delegate = self; 
    [theAudio play]; 
} 

if(pt.x>634 && pt.x<733 && pt.y >195 && pt.y<276) 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"la" ofType:@"mp3"]; 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    theAudio.delegate = self; 
    [theAudio play]; 
} 


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"rest" ofType:@"mp3"]; 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    theAudio.delegate = self; 
    [theAudio play]; 
} 

Я надеюсь, что это может работать.

Фактически, второй «если ((диапазон) & & (диапазон))" часть не работает. Может ли кто-нибудь сказать мне решение?

Первый диапазон работает, и я хочу, чтобы второй диапазон играл «la.mp3», но когда 2 пальца касаются, он не воспроизводит музыку.

+3

Ваш вопрос непонятен. Что вы ожидаете, и почему? Что происходит вместо этого? –

+0

Извините, я исправлю свой вопрос. –

+0

Тестировали ли вы, чтобы определить, работает ли код воспроизведения звука независимо от кода касания? – ThomasW

ответ

1

Извините, это будет полное редактирование ответа, так как я не могу удалить последний. Я сделал большую ошибку чтения, и мне нужно написать новый ответ. Вы не должны использовать [touches anyObject], потому что это не даст вам ощущения, которое вы хотите использовать в мультитач-системе.

Вы должны использовать [[touches allObjects] objectAtIndex:#], чтобы извлечь прикосновение. Прикосновения будут там, в порядке, в котором они пришли.

+0

+1, это решение. –

+0

Извините, я исправил свой код: '- (void) touchhesBegan: (NSSet *) затрагивает событиеEvent: (UIEvent *) { UITouch * touch = [[касается allObjects] objectAtIndex: #]; CGPoint pt = [touch locationInView: self.view]; ' Я знаю, что« # »должно быть одним числом, но если у меня 7 кнопок не более, так что я должен ввести 7 или ...? что бы я ни печатал 1 или 7, он все еще не работает>< Я очень новый, поэтому я полностью не понимаю ваш ответ, извините –

+0

Цифры сами касаются (если вы коснетесь двумя пальцами, вы получите 2), а не кнопок или чего-то еще. Дело в том, что вам нужно проверить все касания, и ваш код проверяет только первый. Самый простой способ сделать это - это, вероятно, цикл, упомянутый в другом ответе. – borrrden

0

Вам нужно перечитать документы на мероприятиях MultiTouch. Во-первых, вам необходимо установить для свойства multipleTouchEnabled для представления значение YES. Во-вторых, вы только получаете в одно касание, событие каждый раз, через, так как вы настраиваете

UITouch *touch = [touches anyObject]; 

Вместо этого попробуйте

for (UITouch * touch in touches) { 

выполнить свой код на каждом прикосновении в текущем наборе.

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

Другая (лучшая) альтернатива заключалась бы в том, чтобы полностью касаться штрихов и просто использовать кнопки. Вы можете получать уведомления, когда кнопка нажата (начиная заметку) и когда кнопка отпущена (отслеживайте, какие из них все еще опустились, и если вы на последнем месте вниз, затем воспроизведите «rest.mp3»,).