月別アーカイブ: 2015年10月

アプリケーションバッジ 通知の許可

iPhoneのホーム画面でアプリアイコンに数字のバッジを付けたかったのだが、どーしても付けることが出来なかった。
そもそも、delegeteとか、notificationが理解できてないのが悪いのだが、
それにしてもまる二日ほど悩んだ。

参考サイト
iOS8 ローカル通知の実装についてメモ。 | scherzi a parte

なんとなく、iPhone本体(もしくはシミュレータ)側で通知の許可ができてないのかも、、、と思ってたが、設定画面見ても分からず。

色々とさまよった挙句上記サイトに行き着いた。

AppDelegate.mで下記のように通知の許可を求めれば良いようだ。

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        [[UIApplication sharedApplication] registerUserNotificationSettings:
         [UIUserNotificationSettings settingsForTypes:
          UIUserNotificationTypeAlert|
          UIUserNotificationTypeBadge|
          UIUserNotificationTypeSound categories:nil]];
    }
    
    return YES;
}

スクリーンショット 2015-10-29 18.13.22
これで通知の許可を出せばアイコンにバッジが付いた。

【NSUserDefaults】とmutable

以前データ保存にNSUserDefaultsを使うと書いた。
データの保存にはNSUserDefaults

前回はただの数値の保存だったが今回は配列、それもmutableな配列で入れ子構造の物を保存した。

参考サイト。
Objective-C – NSUserdefaultsにNSMutablearrayを格納する/読み出す – Qiita
NSMutableArrayをユーザーデフォルトに保存する方法 – Dolice Lab
NSUserDefaultsはどこまで保存できるかチェック(2) – iPhoneアプリ開発まっしぐら★ – iPhoneアプリ開発グループ

今回はNSMutableArrayの中にNSDictionary形式のものが入っている。

結果的にuserDefaultsに入れたものはmutableでなくなるらしい。
で、取り出したものを[[defaults arrayForKey:key] mutableCopy] とすれば NSMutableArray に変換出来るらしい。

以下、今回使ったコードの一部

#import "MasterViewController.h"
#import "DetailViewController.h"
NSMutableArray *objects;
@interface MasterViewController ()

#pragma mark - データの保存

- (void)load
{
    // NSUserDefaultsの取得
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    
    objects = [[defaults arrayForKey:@"dream"]mutableCopy];//データを取り出す
    NSLog(@"load");
}

- (void)save
{
    // NSUserDefaultsの取得
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:objects forKey:@"dream"];//データの保存
    [defaults synchronize];
    
    NSLog(@"save");
}

@end

自分用の備忘録なので間違ってたらゴメンね。

xcodeでクリップボードへコピー

プログラム内で任意の文字列をクリップボードにコピーしたかったので検索。

下記サイトを参考にしました。
Objective-Cで指定した文字列をペーストボードにコピーする – Dolice Lab

UIPasteboard *board = [UIPasteboard generalPasteboard];
[board setValue:@"コピーさせたい文字列" forPasteboardType:@"public.utf8-plain-text"];

これだけだとユーザーがわかりにくいのでアラートビューを出すと良いかも。

- (IBAction)copyTextButton:(id)sender
{
    [self setText];
    UIAlertView *alart = [[UIAlertView alloc] initWithTitle:@"下記の内容をクリップボードにコピーしますか?"
                                                    message:settingTextWithURL
                                                   delegate:self
                                          cancelButtonTitle:@"キャンセル"
                                          otherButtonTitles:@"OK",nil];
    alart.tag = 1;
    [alart show];
    
}

-(void) copyText //クリップボードにコピーする
{
    // UIPasteboardのインスタンスを生成する。
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    
    [self setText];
    
    // 文字列を貼付ける。
    [pasteboard setValue:settingTextWithURL forPasteboardType:@"public.utf8-plain-text"];
    
}

3.5インチの時は無し

iPhoneの画面サイズはすっかり大きくなった。
大きいサイズでレイアウトしていると3.5インチに収まらくなる時がある。

そんな時はこっそり広告とかを消しちゃおう。

    //画面サイズによるnendの広告表示非表示
    NSLog(@"%f",[[UIScreen mainScreen] bounds].size.height);
    
    if ([[UIScreen mainScreen] bounds].size.height == 480.000000) {
        self.bannerView.hidden = YES ;
    }

良いのかな?

追記
参考ページ
Auto Layoutでsubviewを動的に非表示にしたときのマージンをどうにかする – 悪あがきプログラマー

マージンのプロパティを作って消したらなお良し。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *banerView3topConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *banerView3bottomConstraint;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //画面サイズによるnendの広告表示非表示
    NSLog(@"%f",[[UIScreen mainScreen] bounds].size.height);
    
    if ([[UIScreen mainScreen] bounds].size.height == 480.000000) {
        self.bannerView3.hidden = YES ;
        self.banerView3topConstraint.constant = 0.f;
        self.banerView3bottomConstraint.constant = 0.f;
    }
}

adMobでスマートバナーとか広告サイズがわからんかった。

adMobをつかってアプリに広告をいれた。

まずここを読んてその通りにやったら320*50の広告は難なく出来た。
スタートガイド  |  iOS 向け Mobile Ads SDK  |  Google Developers

それ以外のサイズの広告は?
と、こちらを読んでみた。
バナー広告のカスタマイズ  |  iOS 向け Mobile Ads SDK  |  Google Developers

しかしながら、「広告サイズの定数値」を設定する場所が分からない。

ここに↓

- (void)viewDidLoad {
  [super viewDidLoad];

  NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]);
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  [self.bannerView loadRequest:[GADRequest request]];
}

これを↓

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];

こう↓挿入してもダメ。

- (void)viewDidLoad {
  [super viewDidLoad];

  NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]);
// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  [self.bannerView loadRequest:[GADRequest request]];
}

んでもっていろいろ〜いろいろ〜検索した所、こちら↓で
ios – Admob smart banner ads not updating on device rotation – Stack Overflow

self.gadBannerView.adSize = kGADAdSizeSmartBannerPortrait;

というのを見つけた。

なのでこう↓いう書き方をして、

- (void)viewDidLoad {
  [super viewDidLoad];

  NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]);
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  self.bannerView.adSize = kGADAdSizeSmartBannerPortrait;
  [self.bannerView loadRequest:[GADRequest request]];
}

GADBannerViewをautolayoutでサイズが変わるようにしたら変化させる事が出来た。

こんなんで良いのかな?

スマートバナーについて追記しました。
adMobでスマートバナー、ふたたび | iPhoneアプリ備忘録

UIPickerViewで時間を入力。

UIDatePickerは日時を扱うことが出来ます。
UIDatePickerModeCountDownTimerを使えば何時間何分という時間を扱うことも出来ます。

しかし、UIDatePickerModeCountDownTimerでは秒数まで入力することが出来ません。
なので、UIpickerViewを使って何時間何分何秒という時間を入力してみたいと思います。

ちなみにここ数回の記事同様に下からヌッと出す仕様になっています。

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
{
    UIPickerView *timePickerView;
}

@property (weak, nonatomic) IBOutlet UITextField *timeTextField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _timeTextField.delegate = self;
    
    timePickerView = [[UIPickerView alloc] init];
    timePickerView.delegate = self;
    timePickerView.dataSource = self;
    timePickerView.showsSelectionIndicator = YES;
    
    _timeTextField.inputView = timePickerView;
    
    //テキスト入力のキーボードに閉じるボタンを付ける
    UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,320,50)];
    accessoryView.backgroundColor = [UIColor colorWithRed:0.69 green:0.769 blue:0.871 alpha:1.0];
    
    // ボタンを作成する。
    UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    closeButton.frame = CGRectMake(210,10,100,30);
    [closeButton setTitle:@"閉じる" forState:UIControlStateNormal];
    
    // ボタンを押したときによばれる動作を設定する。
    [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // ボタンをViewに貼る
    [accessoryView addSubview:closeButton];
    
    //あとはこれを使いたいテキストフィールドに代入すればいいだけ!便利!
    _timeTextField.inputAccessoryView = accessoryView;

}

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

//ピッカーの列数
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
    return 3; //列数
}

//ピッカーの行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch (component) {
        case 0: // 1行目、時間の配列の行数
            return 49;   // 49時間まで
        case 1: // 2行目、分の配列の行数
            return 60;   //0分から59分まで60行
        case 2: // 3行目、秒の配列の行数
            return 60;// 0秒から59秒まで60行
    }
    return 0;
}

//ピッカーに表示する値
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch (component) {
        case 0: // 1列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 1: // 2列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 2: // 3列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        default:
            return 0;
            break;
    }
}

//ピッカーの値が決まるたびに呼ばれるメソッド
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    
    NSInteger val0 = [pickerView selectedRowInComponent:0]; // 1列目の選択された行数を取得
    NSInteger val1 = [pickerView selectedRowInComponent:1]; // 2列目の選択された行数を取得
    NSInteger val2 = [pickerView selectedRowInComponent:2]; // 3列目の選択された行数を取得
    
    _timeTextField.text = [NSString stringWithFormat:@"%.2ld時間 %.2ld分 %.2ld秒",(long)val0,(long)val1,(long)val2];
    
    long time = ((long)val0 * 3600) + ((long)val1 * 60) + (long)val2 ;
    NSLog(@"%ld秒",time);
}


//キーボードを閉じる
-(void)closeKeyboard:(id)sender
{
    [_timeTextField resignFirstResponder];
}

@end

こんな感じになります。

iOS Simulator Screen Shot 2015.10.16 12.24.24

またNSlogで秒数に換算した値も出るようにしてあります。

UIPickerViewを2つ作る。

前回のUIPickerViewを2つ表示しました。

参考サイトは、前回と同じくコチラです。
テキストフィールドをタップして、キーボードの代わりにpickerViewやdatePickerを出す – デビューが遅すぎたびび子ママのプログラム奮闘記
【Xcode】PickerViewを1つのビューで2つ〜複数設置する | iDEA CLOUD/dev

Storyboardでテキストフィールドを2つ作り、ViewContorollerとつなぎます。

UIPickerViewにタグを付けて複数に対応しています。

列数、行数、表示する文字列の指定をUIPickerViewごとに変えるにはifかswichで対応します。

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
{
    UIPickerView *testPickerView;
    UIPickerView *testPickerView2;
}

@property (weak, nonatomic) IBOutlet UITextField *textField1;
@property (weak, nonatomic) IBOutlet UITextField *textField2;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _textField1.delegate = self;
    _textField2.delegate = self;
    
    testPickerView = [[UIPickerView alloc] init];
    testPickerView.delegate = self;
    testPickerView.dataSource = self;
    testPickerView.tag = 0;
    testPickerView.showsSelectionIndicator = YES;
    
    testPickerView2 = [[UIPickerView alloc] init];
    testPickerView2.delegate = self;
    testPickerView2.dataSource = self;
    testPickerView2.tag = 1;
    testPickerView2.showsSelectionIndicator = YES;
 
    _textField1.inputView = testPickerView;
    _textField2.inputView = testPickerView2;
    
    
    //テキスト入力のキーボードに閉じるボタンを付ける
    UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,320,50)];
    accessoryView.backgroundColor = [UIColor clearColor];
    
    // ボタンを作成する。
    UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    closeButton.frame = CGRectMake(self.view.frame.size.width-120,10,100,30);
    [closeButton setTitle:@"閉じる" forState:UIControlStateNormal];
    
    // ボタンを押したときによばれる動作を設定する。
    [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // ボタンをViewに貼る
    [accessoryView addSubview:closeButton];
    
    //あとはこれを使いたいテキストフィールドに代入すればいいだけ!便利!
    _textField1.inputAccessoryView = accessoryView;
    _textField2.inputAccessoryView = accessoryView;
    
}

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

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
    return 3; //列数
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 10; //行数
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{
    
    //ピッカーに表示する値
    switch (component) {
        case 0: // 1列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 1: // 2列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 2: // 3列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        default:
            return 0;
            break;
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    
    NSInteger val0 = [pickerView selectedRowInComponent:0]; // 1列目の選択された行数を取得
    NSInteger val1 = [pickerView selectedRowInComponent:1]; // 2列目の選択された行数を取得
    NSInteger val2 = [pickerView selectedRowInComponent:2]; // 3列目の選択された行数を取得
    NSUInteger tag = [pickerView tag];
    
    if (tag == 0) {
        //一つ目のテキストフィールド
        _textField1.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2];
        
    } else if (tag == 1) {
        //二つ目のテキストフィールド
        _textField2.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2];
    }
}

//キーボードを閉じる
-(void)closeKeyboard:(id)sender
{
    [_textField1 resignFirstResponder];
    [_textField2 resignFirstResponder];
}

@end

こんな感じになります。
iOS Simulator Screen Shot 2015.10.13 14.27.50

ま、いろんなやり方がありますよね。

関連記事
【Swift5】UIPickerViewで2列のピッカーを作る。 | iPhoneアプリ備忘録

UIPickerViewも下から出す。

引き続きUIPickerViewも下から出します。

参考サイトは、コチラです。
テキストフィールドをタップして、キーボードの代わりにpickerViewやdatePickerを出す – デビューが遅すぎたびび子ママのプログラム奮闘記
【Xcode】PickerViewを1つのビューで2つ〜複数設置する | iDEA CLOUD/dev

Storyboardでテキストフィールドを作り、ViewContorollerとつなぎます。

UIPickerViewDelegate,UIPickerViewDataSourceの指定と、列数、行数、表示する文字列の指定も必要です。

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
{
    UIPickerView *testPickerView;
}

@property (weak, nonatomic) IBOutlet UITextField *textField1;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _textField1.delegate = self;
    
    testPickerView = [[UIPickerView alloc] init];
    testPickerView.delegate = self;
    testPickerView.dataSource = self;
    testPickerView.showsSelectionIndicator = YES;
    
    _textField1.inputView = testPickerView;
    
    
    //テキスト入力のキーボードに閉じるボタンを付ける(20160829修正)
    UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,40)];
    accessoryView.backgroundColor = [UIColor lightGrayColor];
    
    // ボタンを作成する。
    UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    closeButton.frame = CGRectMake(self.view.frame.size.width-100,10,100,20);
    [closeButton setTitle:@"close" forState:UIControlStateNormal];
    //修正ここまで
    
    // ボタンを押したときによばれる動作を設定する。
    [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // ボタンをViewに貼る
    [accessoryView addSubview:closeButton];
    
    //あとはこれを使いたいテキストフィールドに代入すればいいだけ!便利!
    
    _textField1.inputAccessoryView = accessoryView;
    

}

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

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
    return 3; //列数
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 10; //行数
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{
    
    //ピッカーに表示する値
    switch (component) {
        case 0: // 1列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 1: // 2列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        case 2: // 3列目
            return [NSString stringWithFormat:@"%ld", (long)row];
            break;
            
        default:
            return 0;
            break;
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    
    NSInteger val0 = [pickerView selectedRowInComponent:0]; // 1列目の選択された行数を取得
    NSInteger val1 = [pickerView selectedRowInComponent:1]; // 2列目の選択された行数を取得
    NSInteger val2 = [pickerView selectedRowInComponent:2]; // 3列目の選択された行数を取得
    
        _textField1.text = [NSString stringWithFormat:@"%ld%ld%ld",(long)val0,(long)val1,(long)val2];
}

//キーボードを閉じる
-(void)closeKeyboard:(id)sender
{
    [_textField1 resignFirstResponder];
}

@end

こんな感じになるはずです。

iOS Simulator Screen Shot 2015.10.13 13.57.44

むっつかしーい。

UIDatePickerModeCountDownTimer

前回に続きUIDatePickerについて。

UIDatePickerのUIDatePickerModeCountDownTimerの情報ってあんまりないよね。

こちらのサイトを参考にしました。
UIDatePickerModeCountDownTimerで値を設定/取得する方法 – colori
また、秒数と時間の変換は、こちらを参考にしました。
NSLog(@”%.2d時%.2d分%.2d秒”,hourTime,minutTime,secondTime);

前回のコードをちょっと変えてみました。
UIDatePickerModeCountDownTimerは分単位までで秒までいじれないのが残念。

iOS Simulator Screen Shot 2015.10.10 19.13.39

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *testText;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //デートピッカーのインスタンス作成初期化
    UIDatePicker *datePicker= [[UIDatePicker alloc]init];
    //デートピッカーのモードを設定
    datePicker.datePickerMode = UIDatePickerModeCountDownTimer;
    //テキストフィールドの入力をデートピッカーに変更
    _testText.inputView = datePicker;
    
    
    //ピッカーの値が変更された時に呼ばれるメソッドを設定
    [datePicker addTarget:self
                   action:@selector(datePicker_ValueChanged:)
         forControlEvents:UIControlEventValueChanged];
    
    
    
    //テキスト入力のキーボードに閉じるボタンを付ける
    UIView* accessoryView =[[UIView alloc] initWithFrame:CGRectMake(0,0,320,50)];
    accessoryView.backgroundColor = [UIColor clearColor];
    
    // ボタンを作成する。
    UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    closeButton.frame = CGRectMake(self.view.frame.size.width-120,10,100,30);
    [closeButton setTitle:@"閉じる" forState:UIControlStateNormal];
    
    // ボタンを押したときによばれる動作を設定する。
    [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // ボタンをViewに貼る
    [accessoryView addSubview:closeButton];
    
    //ボタンを適用するテキストフィールドに設定
    _testText.inputAccessoryView = accessoryView;
    
    
}


//キーボードを閉じる
-(void)closeKeyboard:(id)sender
{
    [self.testText resignFirstResponder];
}

//ピッカーの値を反映
- (void)datePicker_ValueChanged:(id)sender
{
    UIDatePicker *datePicker = sender;
    
    int time =  (int)[datePicker countDownDuration];
    int secondTime = time%60; //秒
    int minutTime = (time/60)%60;  //分
    int hourTime = (time/60/60);   //時

    self.testText.text = [NSString stringWithFormat:@"%.2d時間%.2d分%.2d秒",hourTime,minutTime,secondTime];
    NSLog(@"%.2d時%.2d分%.2d秒",hourTime,minutTime,secondTime);
}



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

@end

UIDatePickerModeCountDownTimerの値は秒数で、countDownDurationプロパティに入ってる。
setCountDownDurationプロパティで数値をセットすることも出来ます。