0

我有一些多点触控问题

这是我在 .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];
}

我希望这可以工作。

实际上,第二个“if ((range) &&(range))”部分不起作用。谁能告诉我解决方案?

第一个范围有效,我希望第二个范围播放“la.mp3”,但是当两根手指按下时,它不会播放任何音乐。

4

2 回答 2

1

抱歉,这将是对答案的完整编辑,因为我无法删除最后一个。我犯了一个重大的阅读错误,我需要写一个新的答案。您不得使用[touches anyObject],因为这不会可靠地为您提供多点触控系统中所需的触摸。

您必须使用[[touches allObjects] objectAtIndex:#]来提取触摸。触摸将按照它们来的顺序在那里。

于 2012-05-08T05:54:29.200 回答
0

您需要重新阅读有关 MultiTouch Events 的文档。首先,您需要将视图的 multipleTouchEnabled 属性设置为 YES。其次,您每次只能获得一个触摸事件,因为您正在设置

UITouch *touch = [touches anyObject];   

而是尝试

for (UITouch * touch in touches) {

在当前集合中的每次触摸时执行您的代码。

其次,我担心你的 AVAudioPlayer 会在 TouchDidBegin 终止时被释放;我认为这会取消其余的播放。它应该是一个属性。此外,AVAudioPlayer 一次只能播放一个音轨,因此您需要两个不同的音轨。

另一种(更好的)选择是完全放弃触摸而只使用按钮。您可以在按下按钮(开始音符)和释放按钮时收到通知(跟踪哪些按钮仍然按下,如果您在最后一个按下,则播放“rest.mp3” )。

于 2012-05-08T06:05:13.170 回答