2010-06-21 60 views
0

我有一个简单的UIButton,一旦点击就播放1秒的声音。我希望能够非常快速地点击那个按钮,并且尽可能多地生成那些声音,就像我以人为的方式一样。对于iPad应用程序UIButton的响应时间

我现在有这个启动和运行的,包括这也许就是其中的罪魁祸首是......另外,我挖到苹果的参考,并不能找到如何快速的一个UIButton到每个事件响应的信息和如果有的话,我可以如何控制和操纵这个价值。

我应该切换到不同的音频框架,如“音频工具箱”或有没有办法让我加快速度,或者指示按钮接受第二次和第三次按下,而第一次按下的动作是仍在进行中。

干杯!

〜nir。

回答

0

创建一个方法来播放与按钮处理程序方法分开的声音。假设你称之为playSound。在你的按钮处理程序,在后台执行该方法:

[self performSelectorInBackground:@selector(playSound) withObject:nil]; 

这并不需要支付额外的开销产卵关闭一个线程,才可以播放声音。如果你想加快它多一点,创建工作线程和使用的池:

[self performSelector:@selector(playSound) 
      onThread:nextThread 
      withObject:nil 
     waitUntilDone:NO]; 

要创建工作线程池:

-(void)stillWorking { 
    NSLog(@"Still working!"); 
} 

-(void)workerThreadMain { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    NSTimer *threadTimer = [NSTimer scheduledTimerWithTimeInterval:10 
                  target:self 
                  selector:@selector(stillWorking) 
                  userInfo:nil 
                  repeats:YES]; 

    [[NSRunLoop currentRunLoop] addTimer:threadTimer forMode:NSDefaultRunLoopMode]; 
    [[NSRunLoop currentRunLoop] run]; 

    [pool drain]; 
} 

-(NSArray*)createWorkerThreads { 
    NSMutableArray *threadArray = [[[NSMutableArray alloc] initWithCapacity:10]autorelease]; 
    NSThread *workerThread; 

    for (i=0;i<10;i++) { 
     workerThread = [[NSThread alloc]initWithTarget:self 
               selector:@selector(workerThreadMain) 
               object:nil]; 
     [workerThread start]; 
     [threadArray addObject:workerThread]; 
    } 
    return [NSArray arrayWithArray:threadArray]; 
} 

(此代码是未经测试,可能需要一些调试,但它应该让你去正确的方向。)

+0

thanx约翰。 我试过你提供的第一个解决方案,声音之间的间隔实际上比以前更慢。为了测试事情,我给按钮附加了5秒钟的声音,并尝试在2-3秒内间隔点击它,期望声音重叠 - 好 - 它们不会。该按钮仍在等待第一个声音完成,即使我已将播放方法调用与控制分离。 在我开始探索工作线程阵列之前,您对这个结果有什么想法?为什么按钮不允许多个线程分叉? 再次感谢! – 2010-06-21 21:39:14

+0

如果它没有播放重叠的声音,我会怀疑发出声音的呼叫正在等待先前的呼叫完成。 – 2010-07-16 05:48:07