iOS NSTimer樣例demo

全部代碼以下:是一個畫板三基顏色的隨機變化app

#import "AppDelegate.h"

@interface AppDelegate ()
{
    NSTimer *_timer;//定時器
}
@end

@implementation AppDelegate
- (void)dealloc {
    self.window =nil;
    [super dealloc];
}
- (void)creatButton {
    NSArray *arr = @[@"開始",@"暫停"];
    
    for (NSInteger i = 0; i < arr.count; i++) {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        //會算座標
        button.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/2-50, 100+i*60, 100, 50);
        //設置標題
        [button setTitle:arr[i] forState:UIControlStateNormal];
        
        //增長事件 self 執行帶參數的btnClick:
        //誰在增長的事件 那麼參數傳得就是誰
        [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        //設置tag 值區分按鈕
        button.tag = 1+i;
        
        //粘貼
        [self.window addSubview:button];
        
    }
}
-(void)btnClick:(UIButton *)btn{
    switch (btn.tag) {
        case 1:
        {
            //啓動定時器
            [_timer setFireDate:[NSDate distantPast]];
        }
            break;
        case 2://定時器暫停
        {
            [_timer setFireDate:[NSDate distantFuture]];
        }
            break;
            
        default:
            break;
    }


    
}
//button觸發以後調用的方法

- (void)creatTimer {
    /*
     第一個參數:時間間隔 單位 s
       2     : 目標對象地址 (任意) 通常寫self
       3     :目標對象的行爲 選擇器
        4    : nil
        5    : YES 是否重複
     一旦用這個函數建立定時器 那麼定時器就會當即啓動
     定時器啓動以後 就會起一個子線程 每一個一段時間 通知 UI主線程 使self 調用 timerClick 方法
     */
    //實例化一個定時器對象
    
    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerClick) userInfo:nil repeats:YES];
    //默認建立 NSTimer 以後就會啓動
    
    //可是咱們的需求 點擊按鈕才能啓動
    //如今咱們應該先把定時器暫停了
    
    //暫停定時器
    [_timer setFireDate:[NSDate distantFuture]];
    
    
}
//定時器 觸發的函數
- (void)timerClick {
    //NSLog(@"%s",__func__);
//    
//    CGFloat red = arc4random()%256/255.0;//隨機產生 0--1
//    CGFloat green = arc4random()%256/255.0;
//    CGFloat blue = arc4random()%256/255.0;
//    
   
    //經過三基色進行配色
    //0-1
    self.window.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
    [self creatButton];
    //建立定時器
    [self creatTimer];
    
    
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end
相關文章
相關標籤/搜索