iOS開發-舒爾特表


周末閑來無事,看一個概念,挺有意思的,舒爾特表,網上也有很多人寫過類似的Demo,本人閑來無事也寫了一下,舒爾特表聽起來很高大上的樣子,不過本人的理解就是一個正方形的矩陣中放的各種小格子,可以是字母,數字或者說是文字,舒爾特表可以通過動態的練習鍛煉視神經末梢。心理學上用此表來研究和發展心理感知的速度,其中包括視覺定向搜索運動的速度。培養注意力集中、分配、控制能力;拓展視幅;加快視頻;提高視覺的穩定性、辨別力、定向搜索能力。練習的時間越長,看表所需的時間會越短。隨着練習的深入,眼球的末梢視覺能力提高,不僅初學者可以有效地拓展視幅,加快閱讀節奏,鍛煉眼睛快速認讀;而且對於進入提高階段之后,同時拓展縱橫視幅,達到一目十行、一目一頁非常有效。每表按字符順序,迅速找全所有的字符,平均1個字符用1秒鍾成績為優良,即9格用9秒、16格用16秒、25格用25秒。(百度百科)

頁面布局

根據上面的概念,大概頁面布局就是3*3的九宮格,一般是選擇數字練習,也沒有特別的多弄弄,Main.storyBoard的布局如下:

需要將所有的按鈕弄成一個集合,還有就是所有按鈕共用一個事件:

集合演示:

按鈕共用事件演示:

Demo實現

上面中的界面主要都是數字1,因此需要的一個方法生成一個隨機的數組,方法如下,生成一個隨機不重復的數組大概的規則就是首先頂一個數組,之后的話,需要將數組打亂,使用隨機數隨機生成索引即可

- (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;
}

將數組中的值賦值給頁面的按鈕:

- (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啟動的時候調用對應的程序:

  [self initButtonTitle];

 這個時候看到頁面的布局應該是這樣的:

做到這一步基本上這個程序完成差不多了,然后就是計時,完成之后統計,閑來看下具體的效果,然后看代碼可能會更好一點:

功能基本上就是設置按鈕的背景顏色,是否可以點擊,計時,清零,彈框,顯示之前點擊的結果,一步一步的分析:

定義成員變量計時和存儲結果:

@interface ViewController ()
@property NSMutableArray *resultArr;
@property NSTimer *timer;
@property NSDate  *beginDate;
@end

設置定時器:

   self.timer=[NSTimer scheduledTimerWithTimeInterval:0.1 invocation:nil repeats:YES];

設置按鈕的背景顏色和顯隱:

 [button setBackgroundColor:[UIColor yellowColor]];
        [button setEnabled:YES];

統計時間:

 NSInteger allTime=[_timer.fireDate timeIntervalSinceDate:_beginDate];
    NSString *timeFormat=[NSString stringWithFormat:@"%02ld:%02ld",allTime/1000,allTime%1000];
    [_timerLabel setText:timeFormat];

判斷結果,如果所有的結果是升序的那么是成功的,否則就是失敗的:

//判斷一個數組是不是升序
- (BOOL)getArrayAsc:(NSArray *)originalArr{
    for (NSInteger i=0; i<[originalArr count]-1; i++) {
        if (originalArr[i]>originalArr[i+1]) {
            return NO;
        }
    }
    return  YES;
}

所有按鈕的點擊事件如下:

- (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中的代碼:

//
//  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM