static int myTime = 30;
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIButton *btn;
@property (weak, nonatomic) IBOutlet UIButton *playBtn;
@property (nonatomic) BOOL isRecording;
- (IBAction)playPause:(id)sender;
@property (retain, nonatomic) AVAudioPlayer *avPlay;
@property (nonatomic,assign) NSInteger firstTouch;
@property (nonatomic,strong) NSTimer *myTimer;
@property BOOL isOver;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.isOver=NO;
self.isRecording=NO;
[self.playBtn setEnabled:NO];
UILongPressGestureRecognizer *longPress =[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressed:)];
[self.btn addGestureRecognizer:longPress];
self.playBtn.titleLabel.alpha = 0.5;
recordedFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"RecordedFile"]];
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *sessionError;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
if(session == nil){
NSLog(@"Error creating session: %@", [sessionError description]);
}else{
[session setActive:YES error:nil];
}
}
- (void)LongPressed:(UILongPressGestureRecognizer *)longGesture{//長按開始 計時也開始
if (longGesture.state==UIGestureRecognizerStateBegan) {
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerMove) userInfo:nil repeats:YES];
}else if(longGesture.state == UIGestureRecognizerStateEnded){//長按結束 錄音也結束
[self.myTimer invalidate];
self.myTimer=nil;
//停止錄音
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"錄音結束" message:@"最多允許錄音30秒" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
alert.delegate=self;
[alert show];
self.isRecording = NO;
[self.btn setTitle:@"結束錄音" forState:UIControlStateNormal];
[self.playBtn setEnabled:YES];
[self.playBtn.titleLabel setAlpha:1];
[recorder stop];
recorder = nil;
NSError *playerError;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedFile error:&playerError];
if (player == nil) {
NSLog(@"ERror creating player: %@", [playerError description]);
}
player.delegate = self;
}
}
-(void)timerMove{
myTime --;NSLog(@"time : %d",myTime);
if (myTime == 0) {//停止錄音
[_myTimer invalidate];
_myTimer=nil;
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"錄音結束" message:@"最多允許錄音30秒" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
alert.delegate=self;
[alert show];
self.isRecording = NO;
[self.btn setTitle:@"GCD結束錄音" forState:UIControlStateNormal];
[self.playBtn setEnabled:YES];
[self.playBtn.titleLabel setAlpha:1];
[recorder stop];
recorder = nil;
NSError *playerError;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedFile error:&playerError];
if (player == nil) {
NSLog(@"ERror creating player: %@", [playerError description]);
}
player.delegate = self;
}else{
self.isRecording=YES;
[self.btn setTitle:@"GCD錄音" forState:UIControlStateNormal];
[self.playBtn setEnabled:NO];
[self.playBtn.titleLabel setAlpha:0.5];
recorder = [[AVAudioRecorder alloc] initWithURL:recordedFile settings:nil error:nil];
[recorder prepareToRecord];
[recorder record];
player = nil;
}
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
[self.playBtn setTitle:@"播放" forState:UIControlStateNormal];
}
- (IBAction)playPause:(id)sender {
if([player isPlaying]){
[player pause];
[self.playBtn setTitle:@"播放" forState:UIControlStateNormal];
}else{
[player play];
[self.playBtn setTitle:@"停止播放" forState:UIControlStateNormal];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
recorder=nil;
player=nil;
NSFileManager *fileManager=[NSFileManager defaultManager];
[fileManager removeItemAtURL:recordedFile error:nil];
recordedFile=nil;
}
@end