XMTimer教程:XMTimer
先导入XMTimer.h
自定义一个继承自XMTimer的类
#import "XMTimer.h"
@interface XMSyncTimer : XMTimer
@end
实现它的方法
#import "XMSyncTimer.h"
@implementation XMSyncTimer
+ (void)startTimerTask:(NSTimeInterval)startTime interval:(NSTimeInterval)interval taskBlock:(taskBlock)block{
//创建线程
NSThread *thread = [[NSThread alloc] initWithBlock:^{
//执行XMTimer的方法
[super startTimerTask:startTime interval:interval taskBlock:block];
}];
[thread start];
}
+ (void)startTimerTask:(NSTimeInterval)startTime durationTime:(NSTimeInterval)durationTime taskBlock:(taskBlock)block{
//创建线程
NSThread *thread = [[NSThread alloc] initWithBlock:^{
//执行XMTimer的方法
[super startTimerTask:startTime durationTime:durationTime taskBlock:block];
}];
[thread start];
}
+ (void)startTimerTask:(NSTimeInterval)startTime interval:(NSTimeInterval)interval durationTime:(NSTimeInterval)durationTime taskBlock:(taskBlock)block taskEndBlock:(taskBlock)taskEndBlock{
//创建线程
NSThread *thread = [[NSThread alloc] initWithBlock:^{
//执行XMTimer的方法,结束计时器代码块这里要注意,这里需要再写一个代码块,把参数代码块放进这个代码块里,再加一句结束线程就可以了
[super startTimerTask:startTime interval:interval durationTime:durationTime taskBlock:block taskEndBlock:^{
taskEndBlock();
[thread cancel];
}];
}];
[thread start];
}
思路是把XMTimer的计时器放进一个线程里,他就不会阻塞程序的运行了。
测试
UIView *sview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 375, 100)];
[sview setBackgroundColor:[UIColor grayColor]];
[self.view addSubview:sview];
[XMSyncTimer startTimerTask:1 interval:0.01 durationTime:5 taskBlock:^{
dispatch_async(dispatch_get_main_queue(), ^{
[sview setFrame:CGRectMake(sview.frame.origin.x , sview.frame.origin.y + 1, sview.frame.size.width, sview.frame.size.height)];
[sview setAlpha:sview.alpha-0.002];
});
} taskEndBlock:^{
NSLog(@"关闭");
}];