環境
- Xcode: 4.6.2
- iOS SDK: 6.1
- プロジェクト: Single View Application
完成図
NSDateを使って残り時間を表示する
ViewController.m
#import "ViewController.h"
@interface ViewController ()
{
UILabel *_timeLabel; // 残り時刻を表示するラベル
int _oneDayTmp; // 一日を秒単位で格納するための変数
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// はじめに押すボタン(firstDateメソッドを呼びたいため今回はUIButtonクラスを使用している)
UIButton *firstBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
firstBtn.frame = CGRectMake(10, 10, 100, 30);
[firstBtn setTitle:@"first" forState:UIControlStateNormal];
[firstBtn addTarget:self action:@selector(firstDate) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:firstBtn];
// 2回目以降に押すボタン(secondDateメソッドを呼びたいため今回はUIButtonクラスを使用している)
UIButton *secondBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
secondBtn.frame = CGRectMake(150, 10, 100, 30);
[secondBtn setTitle:@"second" forState:UIControlStateNormal];
[secondBtn addTarget:self action:@selector(secondDate) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:secondBtn];
// 残り時刻を表示するラベル
_timeLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, 200)];
[self.view addSubview:_timeLabel];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)firstDate
{
// 一日を秒単位で格納
_oneDayTmp = 86400;
NSDate *date = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:date forKey:@"date"];
}
-(void)secondDate
{
NSDate *now = [NSDate date];
int tmp = [now timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"date"]]; // (1)
int passTime;
passTime = _oneDayTmp - tmp; // (2)
int ss = passTime % 60;
int mm = (passTime - ss) / 60 % 60;
int hh = (passTime - ss - mm * 60) / 3600 % 3600;
_timeLabel.text = [NSString stringWithFormat:@"あと %02d:%02d:%02d でなにかが起こります。", hh, mm, ss];
}
@end
firstDateメソッドをはじめに呼び、その後はsecondDateメソッドを毎回呼ぶようにします。そうすればいい感じに動きます。今回はUIButtonクラスを使用しましたが同じ処理ができるならなんでも大丈夫です。ポイントは(1), (2) です。
(1) tmpに入ってくる値は経過時間(秒単位)が入ってきます。
(2) 24時間(秒単位 86400秒)から(1)で取得した経過時間を引き、時間の差を求めます。
あとはそれぞれ、"時分秒"に直し残り時間を求めてUILabelクラスで表示しています。
0 件のコメント:
コメントを投稿