一、定时器
定时器可以在固定时间发送一个消息,通过此消息来调用相应的事件函数,通过此函数可以在固定时间段来完成一个根据时间间隔的任务
1.定时器头文件定义
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
//定义一个定时器对象
NSTimer* _timerView ;
}
//定时器的属性对象(公有,外部可以使用)
@property (retain,nonatomic) NSTimer* timerView ;
@end
2.创建启动按钮来启动定时器
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
btn.frame = CGRectMake(100, 100, 80, 40) ;
//中文输入产生bug的话最后再输入
[btn setTitle:@"启动定时器" forState:UIControlStateNormal] ;
//通过按钮来启动定时器
[btn addTarget:self action:@selector(pressStart) forControlEvents:UIControlEventTouchUpInside] ;
[self.view addSubview:btn] ;
3.设置触发函数
-(void) pressStart
{
_timerView = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTimer:) userInfo:@"小米" repeats:YES] ;
//通过NSTimer的类方法创建一个定时器并且启动这个定时器
//参数P1:每隔多长时间调用定时器函数,以秒为单位
//P2:表示实现定时器函数的对象(指针)
//P3:定时器函数对象
//P4:可以传入定时器函数中一个参数,无参数可传nil
//P5:定时器是否重复操作,YES为重复,NO只完成一次函数调用
//返回值为一个新建好的定时器对象
}
4.停止按钮和触发函数
停止按钮
UIButton* btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
btnStop.frame = CGRectMake(100, 200, 80, 40) ;
[btnStop setTitle:@"停止定时器" forState:UIControlStateNormal] ;
[btnStop addTarget:self action:@selector(pressStop) forControlEvents:UIControlEventTouchUpInside] ;
[self.view addSubview:btnStop] ;
触发函数
-(void) pressStop
{
if (_timerView != nil) {
//使定时器失效
[_timerView invalidate] ;
}
}
5.视图移动
通过定时器改变视图的状态,达到制作动画的效果
//可以将定时器本身作为参数传入
-(void) updateTimer:(NSTimer*) timer
{
NSLog(@"test!!! name = %@",timer.userInfo) ;
//tag最好从100开始
UIView* view = [self.view viewWithTag:101] ;
//使用定时器制作动画
view.frame = CGRectMake(view.frame.origin.x+1, view.frame.origin.y+1, 80, 80) ;
}
6.ViewController完整代码
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
//属性和成员变量的同步,属性使用点语法,成员变量可以不用点语法
@synthesize timerView = _timerView ;
- (void)viewDidLoad {
[super viewDidLoad];
//启动定时器按钮
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
btn.frame = CGRectMake(100, 100, 80, 40) ;
//中文输入产生bug的话最后再输入
[btn setTitle:@"启动定时器" forState:UIControlStateNormal] ;
//通过按钮来启动定时器
[btn addTarget:self action:@selector(pressStart) forControlEvents:UIControlEventTouchUpInside] ;
[self.view addSubview:btn] ;
//停止定时器按钮
UIButton* btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
btnStop.frame = CGRectMake(100, 200, 80, 40) ;
[btnStop setTitle:@"停止定时器" forState:UIControlStateNormal] ;
[btnStop addTarget:self action:@selector(pressStop) forControlEvents:UIControlEventTouchUpInside] ;
[self.view addSubview:btnStop] ;
UIView* view = [[UIView alloc] init] ;
view.frame = CGRectMake(0, 0, 80, 80) ;
view.backgroundColor = [UIColor orangeColor] ;
[self.view addSubview:view] ;
//设置view的标签值,view是成员变量,通过父亲视图对象已经标签值可以获得相应的视图对象
view.tag = 101 ;
}
-(void) pressStart
{
//通过NSTimer的类方法创建一个定时器并且启动这个定时器
//P1:每隔多长时间调用定时器函数,以秒为单位
//P2:表示实现定时器函数的对象(指针)
//P3:定时器函数对象
//P4:可以传入定时器函数中一个参数,无参数可传nil
//P5:定时器是否重复操作,YES为重复,NO只完成一次函数调用
//返回值为一个新建好的定时器对象
_timerView = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTimer:) userInfo:@"小米" repeats:YES] ;
}
//可以将定时器本身作为参数传入
-(void) updateTimer:(NSTimer*) timer
{
NSLog(@"test!!! name = %@",timer.userInfo) ;
//tag最好从100开始
UIView* view = [self.view viewWithTag:101] ;
//使用定时器制作动画
view.frame = CGRectMake(view.frame.origin.x+1, view.frame.origin.y+1, 80, 80) ;
}
//停止定时器
-(void) pressStop
{
if (_timerView != nil) {
//使定时器失效
[_timerView invalidate] ;
}
}
@end