iOS开发-舒尔特表
周末闲来无事,看一个概念,挺有意思的,舒尔特表,网上也有很多人写过类似的Demo,本人闲来无事也写了一下,舒尔特表听起来很高大上的样子,不过本人的理解就是一个正方形的矩阵中放的各种小格子,可以是字母,数字或者说是文字,舒尔特表可以通过动态的练习锻炼视神经末梢。心理学上用此表来研究和发展心理感知的速度,其中包括视觉定向搜索运动的速度。培养注意力集中、分配、控制能力;拓展视幅;加快视频;提高视觉的稳定性、辨别力、定向搜索能力。练习的时间越长,看表所需的时间会越短。随着练习的深入,眼球的末梢视觉能力提高,不仅初学者可以有效地拓展视幅,加快阅读节奏,锻炼眼睛快速认读;而且对于进入提高阶段之后,同时拓展纵横视幅,达到一目十行、一目一页非常有效。每表按字符顺序,迅速找全所有的字符,平均1个字符用1秒钟成绩为优良,即9格用9秒、16格用16秒、25格用25秒。(百度百科)
页面布局
根据上面的概念,大概页面布局就是3*3的九宫格,一般是选择数字练习,也没有特别的多弄弄,Main.storyBoard的布局如下:
需要将所有的按钮弄成一个集合,还有就是所有按钮共用一个事件:
集合演示:
按钮共用事件演示:
Demo实现
上面中的界面主要都是数字1,因此需要的一个方法生成一个随机的数组,方法如下,生成一个随机不重复的数组大概的规则就是首先顶一个数组,之后的话,需要将数组打乱,使用随机数随机生成索引即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
- ( NSArray *)getDataArray{
//需要展示的数组
NSMutableArray *arr=[ NSMutableArray array];
for ( NSInteger i=1; i<10; i++) {
[arr addObject:@(i)];
}
NSInteger count=[arr count];
//生成随机数组
for ( NSInteger i=0; i<count; i++) {
NSInteger index=arc4random()%(count-i)+i;
[arr exchangeObjectAtIndex:index withObjectAtIndex:i];
}
return arr;
}
|
将数组中的值赋值给页面的按钮:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
- ( void )initButtonTitle{
//实例化结果集的可变数组
self .resultArr=[ NSMutableArray array];
NSArray *arr=[ self getDataArray];
for (UIButton *button in self .visionButtons) {
NSString *result=[arr[button.tag-1]stringValue];
[button setTitle:result forState:UIControlStateNormal];
//重新开始的时候要重新设置按钮的背景和状态
[button setBackgroundColor:[UIColor yellowColor]];
[button setEnabled: YES ];
}
[_timerLabel setText:@ "00:00" ];
self .timer=[ NSTimer scheduledTimerWithTimeInterval:0.1 invocation: nil repeats: YES ];
}
|
在viewDidLoad启动的时候调用对应的程序:
1
|
[ self initButtonTitle];
|
这个时候看到页面的布局应该是这样的:
做到这一步基本上这个程序完成差不多了,然后就是计时,完成之后统计,闲来看下具体的效果,然后看代码可能会更好一点:
功能基本上就是设置按钮的背景颜色,是否可以点击,计时,清零,弹框,显示之前点击的结果,一步一步的分析:
定义成员变量计时和存储结果:
1
2
3
4
5
|
@interface ViewController ()
@property NSMutableArray *resultArr;
@property NSTimer *timer;
@property NSDate *beginDate;
@end
|
设置定时器:
1
|
self .timer=[ NSTimer scheduledTimerWithTimeInterval:0.1 invocation: nil repeats: YES ];
|
设置按钮的背景颜色和显隐:
1
2
|
[button setBackgroundColor:[UIColor yellowColor]];
[button setEnabled: YES ];
|
统计时间:
1
2
3
|
NSInteger allTime=[_timer.fireDate timeIntervalSinceDate:_beginDate];
NSString *timeFormat=[ NSString stringWithFormat:@ "%02ld:%02ld" ,allTime/1000,allTime%1000];
[_timerLabel setText:timeFormat];
|
判断结果,如果所有的结果是升序的那么是成功的,否则就是失败的:
1
2
3
4
5
6
7
8
9
|
//判断一个数组是不是升序
- ( BOOL )getArrayAsc:( NSArray *)originalArr{
for ( NSInteger i=0; i<[originalArr count]-1; i++) {
if (originalArr[i]>originalArr[i+1]) {
return NO ;
}
}
return YES ;
}
|
所有按钮的点击事件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
- ( IBAction )getResult:( id )sender {
UIButton *button=(UIButton *)sender;
//设置背景颜色
[button setBackgroundColor:[UIColor greenColor]];
//按钮点击一次就不再点击
[button setEnabled: NO ];
NSInteger value=[[[button titleLabel] text] integerValue];
[ self .resultArr addObject:[ NSNumber numberWithInteger:value]];
//点击第一个按钮之后设置开始时间
if ([ self .resultArr count]==1) {
//游戏开始时间
_beginDate=[ NSDate date];
//游戏开始
[_timer fire];
}
NSInteger allTime=[_timer.fireDate timeIntervalSinceDate:_beginDate];
NSString *timeFormat=[ NSString stringWithFormat:@ "%02ld:%02ld" ,allTime/1000,allTime%1000];
[_timerLabel setText:timeFormat];
//所有的点击完成之后的调用
if ([ self .resultArr count]==9) {
//销毁定时器
[_timer invalidate];
//弹框
NSString *tip;
if ([ self getArrayAsc: self .resultArr]) {
tip=@ "恭喜你,通过比赛" ;
} else {
tip=@ "不好意思,比赛失败" ;
}
//将点击的结果使用逗号进行拼接
NSString *resultStr=[ NSString stringWithFormat:@ "%@" ,[ self .resultArr componentsJoinedByString:@ "," ]];
UIAlertView *alterView=[[UIAlertView alloc] initWithTitle:tip message:resultStr delegate: nil cancelButtonTitle:@ "确定" otherButtonTitles: nil ];
[alterView show];
}
}
|
ViewController.m中的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
//
// ViewController.m
// TableVision
//
// Created by keso on 15/1/18.
// Copyright (c) 2015年 keso. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property NSMutableArray *resultArr;
@property NSTimer *timer;
@property NSDate *beginDate;
@end
@implementation ViewController
- ( void )viewDidLoad {
[ super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[ self initButtonTitle];
// self.timer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:nil userInfo:nil repeats:YES];
}
- ( void )triggerTime:( NSTimer *)sender{
}
- ( void )initButtonTitle{
//实例化结果集的可变数组
self .resultArr=[ NSMutableArray array];
NSArray *arr=[ self getDataArray];
for (UIButton *button in self .visionButtons) {
NSString *result=[arr[button.tag-1]stringValue];
[button setTitle:result forState:UIControlStateNormal];
//重新开始的时候要重新设置按钮的背景和状态
[button setBackgroundColor:[UIColor yellowColor]];
[button setEnabled: YES ];
}
[_timerLabel setText:@ "00:00" ];
self .timer=[ NSTimer scheduledTimerWithTimeInterval:0.1 invocation: nil repeats: YES ];
}
- ( IBAction )oneMore:( id )sender {
[ self initButtonTitle];
}
- ( NSArray *)getDataArray{
//需要展示的数组
NSMutableArray *arr=[ NSMutableArray array];
for ( NSInteger i=1; i<10; i++) {
[arr addObject:@(i)];
}
NSInteger count=[arr count];
//生成随机数组
for ( NSInteger i=0; i<count; i++) {
NSInteger index=arc4random()%(count-i)+i;
[arr exchangeObjectAtIndex:index withObjectAtIndex:i];
}
return arr;
}
- ( IBAction )getResult:( id )sender {
UIButton *button=(UIButton *)sender;
//设置背景颜色
[button setBackgroundColor:[UIColor greenColor]];
//按钮点击一次就不再点击
[button setEnabled: NO ];
NSInteger value=[[[button titleLabel] text] integerValue];
[ self .resultArr addObject:[ NSNumber numberWithInteger:value]];
//点击第一个按钮之后设置开始时间
if ([ self .resultArr count]==1) {
//游戏开始时间
_beginDate=[ NSDate date];
//游戏开始
[_timer fire];
}
NSInteger allTime=[_timer.fireDate timeIntervalSinceDate:_beginDate];
NSString *timeFormat=[ NSString stringWithFormat:@ "%02ld:%02ld" ,allTime/1000,allTime%1000];
[_timerLabel setText:timeFormat];
//所有的点击完成之后的调用
if ([ self .resultArr count]==9) {
//销毁定时器
[_timer invalidate];
//弹框
NSString *tip;
if ([ self getArrayAsc: self .resultArr]) {
tip=@ "恭喜你,通过比赛" ;
} else {
tip=@ "不好意思,比赛失败" ;
}
//将点击的结果使用逗号进行拼接
NSString *resultStr=[ NSString stringWithFormat:@ "%@" ,[ self .resultArr componentsJoinedByString:@ "," ]];
UIAlertView *alterView=[[UIAlertView alloc] initWithTitle:tip message:resultStr delegate: nil cancelButtonTitle:@ "确定" otherButtonTitles: nil ];
[alterView show];
}
}
- ( void )didReceiveMemoryWarning {
[ super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//判断一个数组是不是升序
- ( BOOL )getArrayAsc:( NSArray *)originalArr{
for ( NSInteger i=0; i<[originalArr count]-1; i++) {
if (originalArr[i]>originalArr[i+1]) {
return NO ;
}
}
return YES ;
}
@end
|
iOS开发-舒尔特表相关推荐
- iOS开发那些事-表视图UI设计模式
软件设计中有设计模式,在UI设计方面也有设计模式.由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式.这两种模式已经成 ...
- IOS开发学习----给表视图设置缩进级别
在controller.m文件中的@end declaration上方添加方法 : #pragma mark - #pragma mark Table Delegate Methods-(NSInte ...
- IOS开发之表视图(UITableView)
IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
- ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)
好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例.在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行 ...
- iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题
iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题 参考文章: (1)iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题 (2)https://www. ...
- IOS开发-TableView表视图LV2
在上一章节IOS开发-TableView表视图基础的学习后, 我觉得对于表视图的学习不应只局限于基础知识的学习,应用在实战中的话想要构建丰富的多元化视图界面我想还是必须深入地再学习下. 于是有了这个L ...
- IOS开发-TableView表视图基础
表视图在IOS中的应用非常广泛,常用于展示显示数据列表. 在工具组中包含了Table View 和Table View Cell 每个表示图都是UITableView的一个实例,每个可见行都是UITa ...
- iOS学习笔记-018.舒尔特表游戏
舒尔特表游戏 一舒尔特表简介 二 舒尔特表游戏说明 说明 作用 规则 评测 图示 三跳到下一界面 四获取目标ViewController 五返回到主界面 六计时时钟的调用 七创建存储随机数不重复的数组 ...
- iOS开发系列--让你的应用“动”起来
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
最新文章
- docker 离线安装 mysql_Oracle数据库之docker 离线环境安装oracle
- 【微读书】《人工智能颠覆未来战争》连载之一:机器战胜人类?——AlphaGo人机对战的启示...
- 通往奥格瑞玛的道路(洛谷 1462)
- Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号
- docker核心网络原理详解
- FFPLAY的原理(三)
- MyBatis 持久化框架快速使用入门(Xml配置版)
- 基于SSM的物业管理系统-JSP MYSQL小区物业费管理系统
- BGP、MPLS综合实验
- 兰大《银行会计学》命题作业离线作业
- mysql结构改写为hbase表_sqlite数据库修改表结构
- 个位数字加百位数字等于千位数字加上十位数字,且该该数为奇数
- CSS3干货23:常用字体样式设置
- 【面试】Java 并发编程
- APENFT TRON GameFi黑客松大赛成功落幕 50万美元大奖花落谁家
- 实体店数字化线上线下一体化经营转型
- Linux中计算特定CPU使用率
- Chalk-控制台输出着色Nodejs库
- python爬虫学习(8) —— 关于4399的一个小Demo
- 分形几何python代码_Python教程之绘制Mandelbrot集合
热门文章
- 强哥说Java--Java接口
- Vue和ElementUI第二天
- Android 9.0 cmds
- python中button对象的方法_Python cmds.shelfButton方法代码示例
- python snmp_cmds库snmpwalk 中文正常显示方法
- uni-app项目Android离线打包UrlSchemes设置
- MATLAB使用符号工具箱计算函数的5阶麦克劳林多项式的四种方法(附指定阶数、指定点的泰勒展开)
- 第2组 团队展示(组长)
- 当析构函数遇到多线程 ── C++ 中线程安全的对象回调
- js控制禁用退格键回到上一个页面