Note that there are some explanatory texts on larger screens.

plurals
  1. POPausing a NSTimer/Stopwatch
    primarykey
    data
    text
    <p>In the project I am working on I need to have a stopwatch that will pause and continue. So far All of the basic functions work, but I have not been able to find a way to pause the timer and re-start it. FYI, I have already checked the other postings and they didn't work. Code:</p> <p>.h:</p> <pre><code>#import &lt;UIKit/UIKit.h&gt; #import &lt;AVFoundation/AVFoundation.h&gt; @interface Timer : UIViewController &lt;AVAudioRecorderDelegate, AVAudioPlayerDelegate&gt; { AVAudioRecorder *recorder; AVAudioPlayer *player; } @property (weak, nonatomic) IBOutlet UIButton *recordPauseButton; @property (weak, nonatomic) IBOutlet UIButton *stopButton; @property (weak, nonatomic) IBOutlet UILabel *stopwatchLabel; -(IBAction)recordPauseTapped:(id)sender; -(IBAction)stopTapped:(id)sender; @end </code></pre> <p>.m:</p> <pre><code>#import "Timer.h" @interface SongIdeasRecording () @property (strong, nonatomic) NSTimer *stopWatchTimer; // Store the timer that fires after a certain time @property (strong, nonatomic) NSDate *startDate; // Stores the date of the click on the start button @end @implementation Timer @synthesize stopButton, playButton, recordPauseButton, stopwatchLabel; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)updateTimer { // Timer is 1/10 of a second so thats what we add to stopwatch NSTimeInterval timeInterval = 0.1; // Create a date formatter NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"HH:mm:ss.SSS"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; // Take the time currently displayed on the stopwatch and add the time interval to it NSDate *oldDate = [dateFormatter dateFromString:self.stopwatchLabel.text]; NSDate *newDate = [oldDate dateByAddingTimeInterval:timeInterval]; //Get a string representation of the new date NSString *timeString = [dateFormatter stringFromDate:newDate]; self.stopwatchLabel.text = timeString; } - (IBAction)recordPauseTapped:(id)sender { self.startDate = [NSDate date]; // Create the stop watch timer that fires every 100 ms self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; // Stop the audio player before recording if (player.playing) { [player stop]; } if (!recorder.recording) { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; // Start recording [recorder record]; [recordPauseButton setTitle:@"Pause" forState:UIControlStateNormal]; } else { // Pause recording [self.stopWatchTimer invalidate]; self.stopWatchTimer = nil; [self updateTimer]; [recorder pause]; [recordPauseButton setTitle:@"Record" forState:UIControlStateNormal]; } [stopButton setEnabled:YES]; [playButton setEnabled:NO]; } - (IBAction)stopTapped:(id)sender { [recorder stop]; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setActive:NO error:nil]; [self.stopWatchTimer invalidate]; self.stopWatchTimer = nil; [self updateTimer]; } - (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder successfully: (BOOL)flag{ [recordPauseButton setTitle:@"Record" forState:UIControlStateNormal]; [stopButton setEnabled:NO]; [playButton setEnabled:YES]; } - (IBAction)playTapped:(id)sender { if (!recorder.recording){ player = [[AVAudioPlayer alloc] initWithContentsOfURL:recorder.url error:nil]; [player setDelegate:self]; [player play]; self.startDate = [NSDate date]; stopwatchLabel.text = @"00:00:00.000"; self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; } } - (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { [self.stopWatchTimer invalidate]; self.stopWatchTimer = nil; [self updateTimer]; } @end </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload