一个iOS上的秒表小应用的实现方法分享

2016-02-19 10:58 36 1 收藏

下面图老师小编要跟大家分享一个iOS上的秒表小应用的实现方法分享,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

模仿实现一下ios系统应用时钟里的秒表程序,就是这个应用:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

主要实现的功能:
1.由start/stop键实现计时
2.有reset/lap键实现复位和计次

需要思考的点:
1.时间的表示方法(有很多种思路)
2.计次数据的倒序排列,即计次1的数据在最底端,依次向上为计次2,计次3的时间数据

我的实现:
ARC省去了我们自行管理内存的大部分事情,写惯了c++于是舒服了很多

代码如下:

- (IBAction) startOrstop:(UIButton *)sender 

    //点击切换按钮背景图 
    UIImage *newImage = (checked) ? [UIImage imageNamed:@"red.png"] : [UIImage imageNamed:@"green.png"]; 
    [leftBtn setBackgroundImage:newImage forState:UIControlStateNormal]; 
     
    NSString *titlel = (checked) ? (@"Stop") : (@"Start"); 
    [leftBtn setTitle:titlel forState:UIControlStateNormal]; 
    NSString *titler = (checked) ? (@"Lap") : (@"Reset"); 
    [rightBtn setTitle:titler forState:UIControlStateNormal]; 
   
       
    if (checked)   //start 
    { 
        timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES]; 
    }else {        //stop 
        [timer invalidate]; 
    } 
     
    checked = !checked; 

 
- (IBAction) resetOrLap:(UIButton *)sender 

    static NSInteger count = 1; 
     
    if (checked) //reset 
    { 
        time = time_lap = 0.0; 
        timestr = [NSString stringWithFormat:@"00:00.0"]; 
        [label setText:timestr]; 
        list_time = list_lap = nil; 
        count = 1; 
        [tableview reloadData]; 
         
    }else {      //lap 
        if (list_time == nil) { 
            list_time = [[NSArray alloc]initWithObjects:timestr_lap, nil]; 
            list_lap = [[NSArray alloc]initWithObjects:[NSString stringWithFormat:@"%d",count++], nil]; 
        }else { 
#if 0 
            [list arrayByAddingObject:timestr]; 
#else 
            NSArray *array = [[NSArray alloc]initWithObjects:timestr_lap, nil]; 
            list_time = [array arrayByAddingObjectsFromArray:list_time]; 
            array = [[NSArray alloc]initWithObjects:[NSString stringWithFormat:@"%d",count++], nil]; 
            list_lap = [array arrayByAddingObjectsFromArray:list_lap]; 
#endif 
        } 
        time_lap = 0; 
        [tableview reloadData]; 
     } 

 
- (float) updateTime 

    time+=0.1; 
    time_lap +=0.1; 
    timestr = [NSString stringWithFormat:@"%02d:%04.1f",(int)(time / 60) ,time - ( 60 * (int)( time / 60 ) )]; 
    timestr_lap = [NSString stringWithFormat:@"%02d:%04.1f",(int)(time_lap / 60) ,time_lap - ( 60 * (int)( time_lap / 60 ) )]; 
    [label setText:timestr]; 
    return time; 

 
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    return [list_time count]; 

 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *tableViewIdentifier = @"tableViewIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableViewIdentifier]; 
    if (cell == nil) { 
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:tableViewIdentifier];  
    } 
     
    NSUInteger row = [indexPath row]; 
     
    cell.detailTextLabel.text = [list_time objectAtIndex:row]; 
    cell.detailTextLabel.textColor = [UIColor blackColor]; 
    cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:25.0]; 
    cell.detailTextLabel.textAlignment = UITextAlignmentCenter; 
     
    NSString *text = [[NSString alloc]initWithFormat:@"lap %@", [list_lap objectAtIndex:row]]; 
    cell.textLabel.text = text; 
    return cell; 

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

待改进的地方:
1.对于时间的计时操作和UI事件应该分不同线程实现,这里我偷懒了
2.对于时间的表示方法其实也是很偷懒的,没有按照标准的秒分进位表示

来源:https://www.tulaoshi.com/n/20160219/1596249.html

延伸阅读
一、程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边按钮 二、实现基本功能的程序 代码如下: // //  YYViewController.m //  03-图片浏览器初步 // //  Created b...
来源:PS联盟 作者:Sener 秒表的外壳是金属的,质感部分制作比较麻烦。同时不同的部件用的制作方法不同。圆环部分可以用图层样式来制作质感,按键部分需要用金属渐变来制作。 最终效果 图1 1、新一个800 * 600像素的文件,背景填充黑色。新建一个组,用椭圆选框工具拉出下图所示的正圆选区,给组添加蒙版。 图2 2、调出当前蒙版选区,在...
觉得作者写得太好了,不得不收藏一下。 对这个例子的理解: //类型参数不能用基本类型,T和U其实是同一类型。 //每次放新数据都成为新的top,把原来的top往下压一级,通过指针建立链接。 //末端哨兵既是默认构造器创建出的符合end()返回true的节点。 代码如下: //: generics/LinkedStack.java // A stack implemented with an internal l...
培养一个敬老的孩子(上) 对一些做惯了“小太阳”的孩子来说,由于习惯了长辈对他们无怨无悔的付出,常常不懂得如何尊敬长辈。这里有一份小小的“七天计划”,让孩子从了解他最亲近的爷爷奶奶开始,学会尊敬长辈。 给孩子讲道理的日子(星期一) 孩子的问题:为什么爷爷奶奶可以不工作呢? 在爷爷奶奶年轻的时候,他们也像爸爸妈妈一样工...
标签: 电脑入门
(1)在应用程序的文件菜单上选样退出命令; (2)单击应用程序窗口右上角的关闭按钮; (3)双击窗口标题栏最左边控制菜单图标; (4)按ALT +F4健 (5)如果某个应用程序不再响应用户的的操作,可以按按CTRL+ALT+DEL,弹出WINDOWS安全对话框,单击任务管理器按纽,在 WINDOWS任务管理器的应用程序,选项卡中列出了当前正在运行和没有响应...

经验教程

461

收藏

44
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部