iOS学习——利用Timer更新通话时间与播放器进度条

只考虑了实现,简单说一下原理,所以贼简单!

@implementation VideoViewController
{  
    NSTimer *myChatTimer;
    int chatTime;
    UILabel *chatTimeLabel;
//other param
}

//定义timer属性
-(void)startTimer{
    chatTime = 0;
    myChatTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerFiredMethod:) userInfo:nil repeats:YES];
    
}

//定时器启动后的执行函数
-(void)timerFiredMethod:(NSTimer *)sender{
    chatTime++;
    int hours, minutes, seconds;
    hours = chatTime / 3600;
    minutes = (chatTime % 3600) / 60;
    seconds = (chatTime %3600) % 60;
    chatTimeLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

//停止定时器
-(void)stopTimer{
    [myChatTimer invalidate];
    myChatTimer = nil;
    chatTime = 0;
}
//....
@end

这是我在一个视频通话醒目中用的方法,在remoteVideo成功连接时,调用startTimer,在通话结束时调用stopTimer即可。

myChatTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerFiredMethod:) userInfo:nil repeats:YES];
意思是自建立Timer后每隔1.0s就fire一次,就去调用timerFiredMethod,而这个method就是自定义的方法了,想让程序每隔1秒干点什么就写点什么,最后在stopTimer中用invalidate方法来结束timer,做一些清理工作。

done!


补充一点,如果想让定时器在某种情况下停止计时,之后再恢复计时,就像音乐播放器中的计时器,在音乐播放器中,Timer可以有几个作用:

  1. 更新播放进度条;
  2. 更新播放时间;
  3. 。。。
当然,对于每个功能可以分别定义Timer变量,对于1,2功能,完全可以定义一个Timer,然后在一个firedMethod中同时实现更新进度。
@interface ViewController ()
{
    AVAudioPlayer *avAudioPlayer;
    UIProgressView *progressV;
    UISlider *progressSlider;
    UILabel *playTime;
    UILabel *playVolume;
    
    NSTimer *myTimer;
    NSTimer *mySliderTimer;
    
    BOOL isPaly;
}

-(void)startMyTimer{
    if(!myTimer){
        myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateProgress:)  userInfo:nil repeats:YES];
    }
}

//播放进度条
- (void)updateProgress:(NSTimer *)sender
{
    //通过音频播放时长的百分比,给progressview进行赋值;
    NSLog(@"current time : %.2f",avAudioPlayer.volume);
    float progress = avAudioPlayer.currentTime/avAudioPlayer.duration;
    [progressV setProgress:progress];
int playedTime = (int)avAudioPlayer.currentTime;
    int second = (playedTime%3600)%60;
    int minute = (playedTime%3600)/60;
     playTime.text =[ NSString stringWithFormat:@"%02d:%02d",minute,second];
}

-(void)Play{
    
    if(![avAudioPlayer isPlaying]){
        [avAudioPlayer play];
        myTimer.fireDate = [NSDate distantPast];
    }
}
-(void)Pause{
    
    if([avAudioPlayer isPlaying]){
        [avAudioPlayer pause];
         myTimer.fireDate = [NSDate distantFuture];
    }
    
}
//other method...
@end

时间暂停和恢复功能:

myTimer.fireDate = [NSDate distantFuture];//恢复

myTimer.fireDate = [NSDate distantPast];//暂停


done!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值