Object-C NSTimer定时器使用

本文介绍了Objective-C中定时器的使用方法,包括NSTimer的初始化、定时器的selector实现及target定义。通过实例展示了如何创建一个每60秒执行一次的任务。

在编程过程中,总有需要使用到定时器的时候,Object-C中有专门的NSTimer:

@interface NSTimer : NSObject
//初始化,最好用scheduled方式初始化,不然需要手动addTimer:forMode: 将timer添加到一个runloop中。
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;

- (void)fire;  //立即触发定时器

- (NSDate *)fireDate;//开始时间
- (void)setFireDate:(NSDate *)date;//设置fireData,其实暂停、开始会用到

- (NSTimeInterval)timeInterval;//延迟时间

- (void)invalidate;//停止并删除
- (BOOL)isValid;//判断是否valid

- (id)userInfo;//通常用nil

@end

使用NSTimer比需要做到:

1. 定时器的selector实现:

- (void)handleTimer: (NSTimer *) timer
{
    NSDictionary *currentAudioTrack = [_player getCurrentAudioTrack];
    for (id key in currentAudioTrack) {
        NSLog(@"key: %@ , value: %@ ", key, [currentAudioTrack objectForKey:key]);
    }
    
    if (1 == [currentAudioTrack[@"type"] integerValue]) {
        NSDictionary *nonDolbyLang = @{@"lang":@"1", @"type":@"0"};
        [_player switchAudioStream:nonDolbyLang];
    }else {
        NSDictionary *dolbylang = @{@"lang":@"1", @"type":@"1"};
        [_player switchAudioStream:dolbylang];
    }
}

2. 定时器target以及定义实现:

- (void)setupswitchAudioTimer{
    NSTimer *switchAudioTimer = [NSTimer scheduledTimerWithTimeInterval: 60.0   // 间隔60s执行一次handleTimer
                                                                 target: self
                                                               selector: @selector(handleTimer:)
                                                               userInfo: nil
                                                                repeats: YES];
    [switchAudioTimer setFireDate:[NSDate distantPast]];
}

3. 开启定时器即调用此定时器:

[self setupswitchAudioTimer];


Objective - C中实现自定义进度条可以有多种方式,以下为不同类型进度条的实现方法: ### 自定义条形进度条 可以通过创建一个自定义的视图类`HWProgressView`来实现条形进度条。示例代码如下: ```objc // 创建进度条 HWProgressView *progressView = [[HWProgressView alloc] initWithFrame:CGRectMake(30, 365, 150, 20)]; // 设置进度条边框宽度 progressView.progerStokeWidth = 1.0f; // 设置进度条未加载背景颜色 progressView.progerssBackgroundColor = [UIColor lightGrayColor]; // 设置进度条已加载颜色 progressView.progerssColor = [UIColor blueColor]; // 设置背景边框颜色 progressView.progerssStokeBackgroundColor = [UIColor grayColor]; // 将进度条添加到视图 [self.view addSubview:progressView]; self.progressView = progressView; ``` 上述代码中,首先创建了一个`HWProgressView`实例,并设置了其位置和大小。接着对进度条的边框宽度、未加载背景颜色、已加载颜色以及背景边框颜色进行了设置,最后将进度条添加到当前视图中 [^3]。 ### 利用`UISlider`实现简单进度条 可以通过设置`UISlider`的最小值和最大值来模拟进度条,示例如下: ```objc // 将slider的最小值和最大值改成0到1 // 假设slider是已经创建好的UISlider实例 slider.minimumValue = 0; slider.maximumValue = 1; ``` 此方法将`UISlider`的取值范围设置为0到1,可用于简单的进度显示,并且可以监听其`value`属性的变化来更新进度 [^1]。 ### 定时更新进度条 可以使用`NSTimer`定时更新进度条,示例代码如下: ```objc [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(Progress:) userInfo:progressView repeats:YES]; ``` 上述代码创建了一个每0.1秒触发一次的定时器,每次触发都会调用`Progress:`方法,并将`progressView`作为参数传递给该方法,可在`Progress:`方法中更新进度条的进度 [^4]。 ### 自定义圆形进度条 可通过自定义视图类来绘制圆形进度条,如创建`HMProgressView`类,在其实现文件中进行绘制操作。示例代码框架如下: ```objc // HMProgressView.m #import "HMProgressView.h" @implementation HMProgressView // 绘制方法 - (void)drawRect:(CGRect)rect { // 在这里进行圆形进度条的绘制操作 } @end ``` 在`drawRect:`方法中,可以使用Core Graphics框架进行圆形进度条的绘制,具体绘制逻辑需要根据需求实现 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值