2011-05-23 57 views
0

我在錄製應用程序中添加了uiprogreesView。當我點擊開始錄製按鈕時它需要幾秒鐘的時間才能開始錄製,並且我的進度視圖開始,我也用uilabels來獲取錄製的時間。但是我的progess視圖不與記錄time.Actual錄製時間同步是小於進度視圖標籤。這裏是我的代碼UIProgress在錄製應用程序中查看

- (IBAction)startRecordingButtonPressed:(id)sender { 


recorder = [[AVAudioRecorder alloc]initWithURL:recordedFile 
               settings:recordSetting error:&error]; 
     [recorder setDelegate:self]; 

     [recorder prepareToRecord]; 

     [recorder recordForDuration:(NSTimeInterval)60]; 

     [recorder record]; 

     timeStartLabel.text != "0"; 
     progressView.progress = 0.0; 

     [NSThread detachNewThreadSelector:@selector(startjob) 
           toTarget:self withObject:nil]; 

    } 

- (void)startjob { 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    [NSThread sleepForTimeInterval:2]; 
    [self performSelectorOnMainThread:@selector(moreProgress) 
          withObject:nil waitUntilDone:NO]; 
    [pool release]; 


} 
- (void)moreProgress { 

    float actual = [progressView progress]; 

    timeStartLabel.text = [NSString stringWithFormat:@"%.2f" ,actual]; 

    if (actual < 1) { 
     progressView.progress = actual + 0.01; 
     [NSTimer scheduledTimerWithTimeInterval:0.5 
             target:self 
             selector:@selector(moreProgress) 
             userInfo:nil repeats:NO]; 

    } 

} 

請help.And當我點擊錄音鍵按鈕,然後會去藍色幾秒鐘,然後我背到其默認顏色,然後開始實際記錄,但點擊按鈕時開始進度視圖。

回答

0

您可以在給定的時間間隔內使用啓用NSTimer,並且除了使用CADisplayLink之外,還可以根據時間進度更新您的顯示器(您可以從任何給定點的NSTimer中獲取fireDate並更新進度條據此)。

當NSTimer啓動時,您會使您的顯示鏈接無效(或者您可以將其暫停以備將來的回放..)。

例子:

self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView)]; 
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

然後在drawView函數:

NSDate* currTS = [NSDate date]; 
NSDate* fireTS = [self.captureTimer fireDate]; 
NSTimeInterval tsInterval = [fireTS timeIntervalSinceDate:currTS]; 

float newProgress = 1.0f - (tsInterval/self.intervalFromDefault); 

時self.captureTimer是的NSTimer你設置與記錄方法。

+0

我沒有使用CADisplayLink。你有任何例子或鏈接?除了你建議回答? – iProgrammer 2011-05-23 09:27:46

+0

你可以試試[這個](http://files.slembcke.net/chipmunk/tutorials/SimpleObjectiveChipmunk/)。大多數用途都與openGL相關,但它對於更多基本圖形請求也很有用。 – Guys 2011-05-23 09:36:02

0

假設進度是以某種方式顯示已經過去的時間,你不能在更新中使用recorder.currentTime嗎?計時器保持原樣,但標籤和進度基於此屬性進行更新。

progressView.progress = recorder.currentTime/totalDuration; 
timeStartLabel.text = [NSString stringWithFormat:@"%.2f", progressView.progress]; 

這樣progressView在實際記錄開始之前不會更新。

編輯

- (void) moreProgress { 

    progressView.progress = recorder.currentTime/totalDuration; // Have totalDuration as ivar or replace it with '60' same as passed during recorder initialization. 
    timeStartLabel.text = [NSString stringWithFormat:@"%.2f", progressView.progress]; 

    if (recorder.recording) { 
     [NSTimer scheduledTimerWithTimeInterval:0.5 
             target:self 
             selector:@selector(moreProgress) 
             userInfo:nil repeats:NO]; 

    } 

} 

此外,如果暫停的計時器將不會被設置。您可以擁有一個重複定時器並保存對其的引用,或者使用代理方法audioRecorderEndInterruption:withFlags:重新啓動它。

+0

我會試試這個。 – iProgrammer 2011-05-23 10:01:16

+0

但這並不能解釋藍色。所以可能不是您的問題的真正解決方案。 – 2011-05-23 10:08:17

+0

藍色意味着......開始錄製需要時間。 – iProgrammer 2011-05-23 10:24:53

相關問題