プロフィール

カイロプラクター てん

Author:カイロプラクター てん


【趣味】
・自転車に乗って
 ヘロヘロになる事。
・カイロプラクティックで
 人を元気にする事。

カレンダー
03 | 2017/04 | 05
- - - - - - 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 - - - - - -
作ったiOS App

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iOS Singletone の使い方 勉強 #7

今回は、iOS Singletone の使い方 勉強 #6の続きブラッシュアップです。

まずは、
アプリを実行した時に、一瞬ですが
1302127.png
↑この初期値が見えて、かっこ悪いので
- (void)viewDidLoadの所に
1302128.png
これ
単純ですが、見た目がよくなります。

次に、アイコン
1302121.png

使うアイコンは、これ
watch.pngwatch@2x.png
Tools.pngTools@2x.png

これを、Supporting.Filesのドロップ
1302122.png

MainStoryboard.storyboardをクリックして
FirstViewへ
1302123.png

[1]クリック
1302124.png
[2] TIMERと入力
[3] Watch.pngを選択

SecondViewも同じく
1302125.png
[2] SETTINGと入力
[3] Tools.pngを選択

これで、アイコンの設定がおわりました。

では、
シミュレータRun!
1302126.png

ふむ、ふむ、
アイコンが変わり、いい感じになりました。

ふぅ〜、長かったなぁ〜

今回で、Singletoneの勉強はおわり。

けど


かなり、心残りというか、残念な所が・・・。

このタイマーアプリの最大欠点

バックグラウンドで実行できない

< 言い訳 >
バックグラウンドでの処理にもよりますが、iOSは10分までしか
許可してくれないみたいです。

と、言う事で

今回は、バックグラウンドでの処理は入れませんでした。

もしかしたら、何か方法があるかもしれません。
その時は、追加で勉強したいと思います。


*** まとめ ***
1.iOS Singletone の使い方 勉強 #1
2.iOS Singletone の使い方 勉強 #2
3.iOS Singletone の使い方 勉強 #3
4.iOS Singletone の使い方 勉強 #4
5.iOS Singletone の使い方 勉強 #5
6.iOS Singletone の使い方 勉強 #6
7.iOS Singletone の使い方 勉強 #7
スポンサーサイト
THEME:プログラミング | GENRE:コンピュータ |

iOS Singletone の使い方 勉強 #6

今回は、iOS Singletone の使い方 勉強 #5の続き
タイマーの時間が0になった時、タイマー音がなるようにします。

音が鳴らせる様に準備
1302107.png
ピッ、ピッ、ピッ、と 順番に押して

ビュンとでたら
1302108.png
AVFoundation.frameworkを選んで Add

こんな感じになる
1302109.png

左側のproject Navigatorにも新しく追加されているので
1302111.png
Frameworksに移動する。
1302112.png
こんな感じです。

これで、音が使える様になりました。

では、プログラムの方へ

FirstViewController.hをクリックして
1302113.png
#import <AVFoundation/AVFoundation.h> を追加

アラームを鳴らす場所は!?

FirstViewController.mをクリックして
timer_count += 1; の所へ、
1302115.png
    while ( timer_SW ) {
if (timer_count == timer_time ) {
NSLog(@"ピピピ");
} else {
timer_count += 1; // 1秒ずつ加算
}
break;
}
ごっそり改造してみた。

まずは、実験でアラームの代わりに、ログに”ピピピ”と出力される。

シミュレータRun!
1302116.png
0で止まる様になって、0になるとログに1秒間隔で”ピピピ”と表示され
STOPを押すと止まる。

成功!

では、本当に音を鳴らしましょう!
これって、対戦ゲームを作ろうでやったなぁ〜。

今回使う音は、これ
アラーム音

これを、Supporting Filesにドロップ
1302117.png

まずは、変数を宣言
FirstViewController.hをクリックして
1302118.png
AVAudioPlayer *timer_alarm;を追加

次は、FirstViewController.mをクリックして
- (void)viewDidLoadの所に、音を鳴らす準備をします。
1302119.png
NSString *timer_alarm_path = [[NSBundle mainBundle] pathForResource:@"ALM" ofType:@"mp3"];
NSURL *timer_alarm_url = [NSURL fileURLWithPath:timer_alarm_path];
timer_alarm = [[AVAudioPlayer alloc] initWithContentsOfURL:timer_alarm_url error:nil];
timer_alarm.volume *= 1.0; // 音量


先ほどログに”ピピピ”と表示させた所に音を鳴らすように変更
1302120.png

もう一つ大事な設定が!

いまの状態では、スリープの設定時間がくると勝手にスリープモード突入です。

スリープモードをキャンセルするおまじないを追加します。

- (void)viewDidLoadの所におまじないを、
UIApplication* application = [UIApplication sharedApplication];
application.idleTimerDisabled = YES;

これで、スリープモードキャンセル

大分タイマーらしくなってきたので今回は終わり。

次回は、ちょっとブラッシュアップします。

*** まとめ ***
1.iOS Singletone の使い方 勉強 #1
2.iOS Singletone の使い方 勉強 #2
3.iOS Singletone の使い方 勉強 #3
4.iOS Singletone の使い方 勉強 #4
5.iOS Singletone の使い方 勉強 #5
6.iOS Singletone の使い方 勉強 #6
7.iOS Singletone の使い方 勉強 #7
THEME:プログラミング | GENRE:コンピュータ |

iOS Singletone の使い方 勉強 #5

今回は、iOS Singletone の使い方 勉強 #4の続きでタイマー部分の制御です。

MainStoryboard.storyboardをクリックしてSecondを表示

Label 1個、Button 9個 ドラッグ&ドロップで配置します。
1302083.png
↑こんな感じ

Labelをクリックして
1302084.png
↑こんな感じにして

次は、Buttonを変更
1302085.png
↑こんな感じ

残りのButtonも変更して
1302086.png
↑こんな感じ

では、いつもの連携のおまじない。
Editorの真ん中を押して
1302066.png
SecondViewController.hにして

Labelをクリック
マウス右ボタンでドラッグ&ドロップ
1302088.png

ビュンとでてきたら

Nema にlbl_timer_time と入力して
1302089.png
Connectをクリック

自動的に記載される
1302090.png

次は、Buttonの連携
1:00のボタンをクリックして
マウス右ボタンでドラッグ&ドロップ
1302091.png

ビュンとでたら

1302092.png
Connection → Action
Name → lbl_timer_01min
Connect をクリック

自動的に記載される
1302093.png

残りのButtonも同じ要領で連携
1302094.png

こんな感じになります。

ふぅ〜、
この単純作業は、思ったより大変だなぁ〜

では、各Buttonが押されたらそれに対応した値が
lbl_timer_timeに表示されるようにしましょう。

ここをクリックして表示を切り替えて
1302019.png
SecondViewController.mをクリック

1302095.png

ずら〜りと並んでいるなぁ〜・・・。

では、めげずに

1302096.png

疲れた・・・。
処理を一つにまとめられそうだけど・・。
とりあえず、頑張ろう!

シミュレータRun!
1302097.png

成功!

では、この値をSingletoneに代入しましょう!
まずは、Singletoneで変数を作ります。
Singletone.hをクリック
1302098.png
NSInteger timer_time;
@property NSInteger timer_time;

Singletone.mをクリック
1302099.png
@synthesize timer_time;

これで、変数宣言終わりです。
残りは、各Buttonを・・・、地道に・・・。

- (IBAction)btn_timer_01min:(id)sender {
self.lbl_timer_time.text = @"1:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*1 ;
}

- (IBAction)btn_timer_02min:(id)sender {
self.lbl_timer_time.text = @"2:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*2 ;
}

- (IBAction)btn_timer_03min:(id)sender {
self.lbl_timer_time.text = @"3:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*3 ;
}

- (IBAction)btn_timer_05min:(id)sender {
self.lbl_timer_time.text = @"5:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*5 ;
}

- (IBAction)btn_timer_10min:(id)sender {
self.lbl_timer_time.text = @"10:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*10 ;
}

- (IBAction)btn_timer_15min:(id)sender {
self.lbl_timer_time.text = @"15:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*15 ;
}

- (IBAction)btn_timer_30min:(id)sender {
self.lbl_timer_time.text = @"30:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*30 ;
}

- (IBAction)btn_timer_45min:(id)sender {
self.lbl_timer_time.text = @"45:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*45 ;
}

- (IBAction)btn_timer_60min:(id)sender {
self.lbl_timer_time.text = @"60:00";

Singletone* sharedData = [Singletone sharedManager];
sharedData.timer_time = 60*60 ;
}


長過ぎぃ〜〜〜〜!!

では、これを受け取りましょう!

FirstViewContorller.mをクリックして
ここで受け取ります。
1302100.png
timer_time = 60*3;をコメントにして
下に記載します。

1302101.png
timer_time = sharedData.timer_time;
これで、timer_timeに代入されたのですが、sharedData.timer_timeの初期値が0なので
STARTを押した瞬間 マイナス表示になってしまいます。
初期値を3分にしましょう。

どこで初期値処理、しようかな〜。

せっかくなんで、Singletone.mの初期値処理に記入。
偶然動いていたTimeの方 [ AM/PM 24h切り替え ] の、sharedData.seg_time_chgも一緒に
初期値処理しましょう。
1302102.png
seg_time_chg = 0 ;
timer_time = 60 * 3; 

シミュレータRun!

Timer START!
1302103.png

成功!

でも・・・・。

これでは、Singletoneで指定した初期値がSecondViewに反映されない・・。

では、SecondViewに反映されるように処理を入れましょう。

SecondViewController.mをクリックして
- (void)viewDidLoad の所に
1302104.png
    // Singletoneの設定
Singletone* sharedData = [Singletone sharedManager];

// AM/PM 初期設定
[self.seg_time setSelectedSegmentIndex:sharedData.seg_time_chg];

// タイマー時間 初期設定
NSInteger set_timer = sharedData.timer_time;
NSInteger set_timer_min = set_timer / 60;
NSInteger set_timer_sec = set_timer - ( set_timer_min * 60 );

self.lbl_timer_time.text = [NSString stringWithFormat:@"%02d:%02d",set_timer_min,set_timer_sec];


では、シミュレータ!と
その前に ちょっと、意地悪して
Singletone.mの初期値を変更
時間表示 24h / タイマー時間を 4:56
seg_time_chg = 1 ;
timer_time = 60 * 4 + 56;
と変更して

シミュレータRun!
1302105.png1302106.png
めでたく!
成功!

今回はこれで終わり

次回は、Timerが0になったら、音を鳴らします。

*** まとめ ***
1.iOS Singletone の使い方 勉強 #1
2.iOS Singletone の使い方 勉強 #2
3.iOS Singletone の使い方 勉強 #3
4.iOS Singletone の使い方 勉強 #4
5.iOS Singletone の使い方 勉強 #5
6.iOS Singletone の使い方 勉強 #6
7.iOS Singletone の使い方 勉強 #7
THEME:プログラミング | GENRE:コンピュータ |

iOS Singletone の使い方 勉強 #4

今回はiOS Singletone の使い方 勉強 #3の続きです。

やっと
Singletoneの実装です

いきなり、Singletoneの部分を実装しちゃいましょう!
マウスの右ボタンで
1302058.png
New File...を選んで
1302058.png

1302059.png

1302060.png

最後に
1302061.png
Createをクリック

クラスが出来ました。
1302062.png


ここに書くSingletoneのソースコードは、ググれば沢山でてきますが
これにします。

Singletone.h
#import <Foundation/Foundation.h>
@interface Singletone : NSObject
+(Singletone*)sharedManager;
+(id)allocWithZone:(NSZone*)zone;

@end


Singletone.m
#import "Singletone.h"

@implementation Singletone
static Singletone* _sharedManager = nil;

- (id)init
{
self = [super init];
if (self) {
// 初期処理
}
return self;
}

+ (Singletone*)sharedManager {
@synchronized(self) {
if (_sharedManager == nil) {
(void) [[self alloc] init]; // ここでは代入していない
}
}
return _sharedManager;
}

+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (_sharedManager == nil) {
_sharedManager = [super allocWithZone:zone];
return _sharedManager; // 最初の割り当てで代入し、返す
}
}
return nil; // 以降の割り当てではnilを返すようにする
}

- (id)copyWithZone:(NSZone *)zone{
return self;
}

@end

以上、
これでSingletoneの実装は完了です。

では、このSingletoneを使用して
日時の時間表記、AM/PMと24Hの切り替えを行える様にしましょう。

Second Viewに部品を配置

MainStoryboard.storyboardをクリックして
Second Viewが見えるようにして、今配置してあるもの全て削除します。
1302057.png

真っ白になりました。
部品を配置しましょう。
Segmented Contorolをドラッグ&ドロップして
1302063.png

Segmented Contorolをクリック
1302064.png
Segment 0 を選んで AM/PMと入力

1302065.png
Segment 1 を選んで 24hと入力

では、連携
Editorの真ん中を押して
1302066.png
SecondViewController.hにして

Segmented Contorolをクリック

マウスの右ボタンでドラッグ&ドロップ
1302067.png

Nameにseg_timeと入れて
1302068.png
Connectをクリック

自動的に表記される
1302069.png

もう一回Segmented Contorolを連携
マウスの右ボタンでドラッグ&ドロップして
1302070.png
Connection → Action
Name → btn_seg_time

これで、連携完了

Editorのここを押して
1302019.png
表示を切り替えて

SecondViewController.mをクリック
- (IBAction)btn_seg_time:(id)sender の所に
1302071.png

では、シミュレータRun!
こんどは、ちょっと違います
1302072.png
下側のSecondをクリックして、Viewを切り替えて

AM/PMと24hをクリックすると・・。
ログに
1302073.png
0と1が表示されれば成功!

では、この値をSingletoneしちゃいましょう!

まず、受け渡す為に変数を宣言します。
Singletoneで受け取るので、Singletoneの方で宣言します。

Singeltone.hをクリック
1302074.png
NSInteger seg_time_chg;
@property NSInteger seg_time_chg;
を追加

Singeltone.mをクリック
1302076.png
@synthesize seg_time_chg;

では、変数seg_time_chgに数値を代入しましょう。

SecondViewContoroller.hをクリックして
#import "Singeltone.h"を追加
1302075.png

SecondViewContoroller.mをクリック
1302077.png
    Singletone* sharedData = [Singletone sharedManager];
sharedData.seg_time_chg = sgm_time_index;


これで、seg_time_chgに数値が代入されました。

このseg_time_chgをFirstViewの方で受け取ります。

FirstViewController.hをクリック
1302078.png
#import "Singletone.h"を追加

FirstViewController.mをクリック
時間表時部分のプログラムです。

時間表記部分でseg_time_chgを受け取り時計の表示変更します。
seg_time_chgが[0]がAM/PM [1]の時24時間表記。
1302079.png
    // 現在の時間表示
// Singletoneからデータを取得
Singletone* sharedData = [Singletone sharedManager];

// AM / PM / 24h
NSString *time_AMPM = @"";

// AM / PM : sharedData.seg_time_chg = 0
if (sharedData.seg_time_chg == 0) {
if (nowdateComp.hour < 12 ) {
time_AMPM = @"AM";
}else{
time_AMPM = @"PM";
nowdateComp.hour = nowdateComp.hour - 12;
}
}

// 24h : sharedData.seg_time_chg = 1
// 表示変更しないので、なにもしない。

// 時間表示
self.lbl_time.text = [NSString stringWithFormat:@"%02d:%02d:%02d %@ ",
nowdateComp.hour,
nowdateComp.minute,
nowdateComp.second,
time_AMPM];


よし!
シミュレータRun!
[ AM ]
1302080.png

[ PM ]
1302081.png

[ 24h ]
1302082.png

動いたぁ〜〜〜〜!
ちょっと、AM/PMでかすぎ・・。

今回は、これで終わり

次回は、タイマー部分を制御します。

*** まとめ ***
1.iOS Singletone の使い方 勉強 #1
2.iOS Singletone の使い方 勉強 #2
3.iOS Singletone の使い方 勉強 #3
4.iOS Singletone の使い方 勉強 #4
5.iOS Singletone の使い方 勉強 #5
6.iOS Singletone の使い方 勉強 #6
7.iOS Singletone の使い方 勉強 #7
THEME:プログラミング | GENRE:コンピュータ |

iOS Singletone の使い方 勉強 #3

今回は、iOS Singletone の使い方 勉強 #2の続き
タイマー部分の実装です。

まずは、部品を配置
MainStoryboard.storyboardをクリック
Labelを1個とbutoonを3個配置
1302033.png

Labelをクリックして
1302034.png
こんな感じで変更

次は、ボタン関係
1302035.png
こんな感じで、「START」「STOP」「CLEAR」に変更

レイアウトを微調整して
1302036.png
こんな感じになりました。

恒例のおまじないの連携!
Editorの真ん中をおして、FirstViewController.hになっているのを確認して
1302013.png

Labelをクリック
1302037.png
マウス右ボタンでLabelをドラッグ&ドロップ

ビュンとでてきたら
1302038.png
lbl_timer_timeと入力してConnectをクリック

自動的に作られて連携終了
1302039.png

次は、Button
同じように、STARTボタンをクリックして
マウス右ボタンでSTARTボタンをドラッグ&ドロップ
1302040.png

ビュンとでてきたら
1302041.png
Connection → Action
Name → btn_timer_start
Connectをクリック

自動的に作られて連携終了
1302042.png

残りのSTOP、CLEARも同じように

[ STOP ]
1302043.png

[ CLEAR ]
1302044.png

START、STOP、CLEARのすべて 連携終了
1302045.png

これで、準備終了

プログラムを書いていきます。

Editorの表示を切り替えて
1302019.png

FirstViewController.hをクリックして
変数宣言をします。
1302046.png
int timer_time,timer_count,timer_min,timer_sec; 追加

プログラムの方は、
日時表示に使用しているタイマーをそのまま使います。

FirstViewController.mをクリックして
日付表示の下にこんな感じ
1302047.png
足し算、引き算だけ?

[ 説明 ]
タイマーLabelの設定を3分にしたので、timer_timeを60秒×3
タイマーは1秒間隔で動いているので、timer_count を1加算
timer_sec = timer_time - timer_count 残りのsec数を計算
timer_secからmin数を計算 timer_min = timer_sec /60
timer_secから、minのぶんを減算 timer_sec = timer_sec - timer_min * 60

そして、計算したのをログ出力

シュミレータRun!
1302048.png
成功!

そのまま、lbl_timer_timeに表示して
1302049.png

シミュレータRun!
1302050.png
いぇ〜い♪


次は、START、STOP、CLEARのボタンでこのタイマーを制御します。

まずは、タイマーのON/OFF用の変数を宣言

FirstViewController.hをクリック
BOOL timer_SW;変数宣言
1302051.png

FirstViewController.mをクリック
TimerをOFFにするには、変数timer_countをカウントしなければいいので
timer_count += 1;の所にif文とtimer_SWを使用して
1302053.png
これで、変数 timer_SW の YES/NO でタイマーの制御ができるようになりました。

では、最後に各ボタンの動きをプログラムします。
ボタンを連携させた時に自動的に出来ているところに追記します。

STARTボタンの制御
1302054.png
timer_SW = YES;を追記

STOPボタンの制御
1302055.png
timer_SW = NO;を追記

CLEARボタンの制御
1302056.png
CLEARは、カウントを戻すので
timer_count = 0;を追記

シミュレータRun!

ぐぅ〜♪

ボタンを押しても1秒間隔でしか、更新されず反応が鈍く感じるけど
思い通りに制御できているので

今回はこれで終わりぃ〜〜♪

次回は、本題のsingletoneを追加して、SecondViewで制御していきます。


*** まとめ ***
1.iOS Singletone の使い方 勉強 #1
2.iOS Singletone の使い方 勉強 #2
3.iOS Singletone の使い方 勉強 #3
4.iOS Singletone の使い方 勉強 #4
5.iOS Singletone の使い方 勉強 #5
6.iOS Singletone の使い方 勉強 #6
7.iOS Singletone の使い方 勉強 #7
THEME:プログラミング | GENRE:コンピュータ |
 
検索フォーム
QRコード
QRコード
ブロとも申請フォーム
FC2カウンター
ビリリティピルズ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。