2010-06-21 14 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

相關問題