[学习]第一个iOS小项目:随机点名的LuckyMan

来源:互联网 发布:延庆网络招聘 编辑:程序博客网 时间:2024/06/10 01:16

 周日下午我们做出了第一个iOS小项目:LuckyMan.功能是按下start后,一长串名字会快速轮播,再按下stop,此时会停止轮播,并且停下时的名字会以一种较大的字体和另外一种颜色显示在屏幕中。代码如下:

//
//  ViewController.m
//  LuckyMan
//
//  Created by tusm on 14-11-23.
//  Copyright (c) 2014年 ChenYulian. All rights reserved.
//


#import "ViewController.h"


@interface ViewController ()
@property(nonatomic,strong) NSArray *dataSourceArray;//保存所有人的名字
@property(nonatomic,strong) NSTimer *timer;//定时器
@end


@implementation ViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    //把所有人的名字保存到一个数组里
    self.dataSourceArray=@[@"张荣珺晨",@"陈雨莲",@"温哲",@"彭韵婕",@"魏向民",@"叶何蔚",@"余啸",@"闫奥博",@"徐梓航",@"孙威",@"顾鑫",@"朱嘉鹏",@"宋晓羽",@"池昊宇",@"黄鸿昌"];


// Do any additional setup after loading the view, typically from a nib.
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


//响应按钮的点击事件
- (IBAction)buttonDIdClicked:(UIButton *)sender {
    //切换按钮的标题
    if ([sender.titleLabel.text isEqualToString:@"Start"]) {
        //设置标题为stop
        [sender setTitle:@"Stop" forState:UIControlStateNormal];
        
        //启动定时器
        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeName) userInfo:nil repeats:YES];
    }else{
        [sender setTitle:@"Start" forState:UIControlStateNormal];
        //关掉定时器
        
        //保存当前的大小位置;frame值表示位置
        CGRect rect=self.selectedNameLabel.frame;
        //移动位置到起始点,让中心点重合
        self.selectedNameLabel.center=_scrollNameLabel.center;
        //添加动画
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1];
        
        [self.timer invalidate];
        //获取当前选中的人
        self.selectedNameLabel.text=_scrollNameLabel.text;
        self.selectedNameLabel.frame=rect;
        [UIView commitAnimations];
    }
}
//定时器触发之后将来执行这个方法
- (void)changeName{
    
    //产生一个随机数
    int index = arc4random() % _dataSourceArray.count;
    
    //从数组里面去获取index对应的人的名字
    NSString *tempName = [_dataSourceArray objectAtIndex:index];
    //将当前这个人的名字显示到滚动的label上
    self.scrollNameLabel.text = tempName;
}
                          
                         


@end


notes:

1.我们做一个iOS应用大致有两种思路:一是先做界面,再做逻辑;二是先做逻辑,再去做界面。我们今天做的就是先做界面。

1.看到这张简易的UI图之后(好吧它根本没有UI(╯‵□′)╯︵┻━┻),我们先分析一下它的结构:

右上角有个"start"按钮,按下它之后,它会变成"stop",同时(预先输入的)不同的名字会以上面那排黑色的、字号较小的字体形式,飞快地轮播。当按下"stop"后,"stop"会再次变成"start",同时变化着的名字停止,停在哪个名字上,那个名字就以另外一种字体(薄荷绿,或者马卡龙绿?反正我很喜欢这个颜色:D)从那排黑色小字的地方滑到屏幕中间。That's it!

我认为这体现了在一个产品的开发过程中UI的重要性。如果你不知道UI设计师做出来的动画是啥意思,不知道如何用自然语言描述这段动画(简单说就是:说人话),那如何实现它也无从谈起。所以埋头写代码的,也要好好和设计师交流呀。


2.到现在我们对如何实现这些大致有些谱了。

(1)这个地方的按钮,当它的文本为"start"时,按下会触发两件事:a.它的文本变成"stop";b.名字开始疯狂地随机变化。

Remark:在实现名字变化时,我们应用了数组。首先定义了一个数组,包含我们十五人的名字,然后使用arc4random() %,产生一个随机数,并对数组中元素的个数(15)取余。显然余数为0~14这15个整数,每个数对应一个人的名字(怎么对应的暂时不知道)。我们对定时器timer进行了一些属性设置,使之启动后(按下start后启动)开始进行产生随机数的这个过程。

(2)当按钮文本为"stop"时,按下会使timer停止,同时产生一段动画。

我相信有趣的动画背后其实是很多枯燥的公式做支撑的。就像游戏里,一个物体的位移,一个角色酷炫的轻功都是经过严格的数学公式计算描述出来的。所以面对数学时,要打起精神来……当然,我们这个小project中涉及的动画非常简单。XD。


P.S.我们做完之后又折腾了一下,发现这个应用有个小小的bug,就是如果用户和我们一样无聊到以近似抽风的速度飞快地反复按start按钮时,停手后会发现……他喵的名字停不下来了而且变换的速度越来越快……

P.P.S.东哥说我们以后给同学做这种小应用时可以加一点bug,使之不论怎么抽都抽到自己或者某个人……(嘘

0 0
原创粉丝点击