質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

測定終了時の画面をスクショするため、時刻を停止させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 733

northpotato

score 35

iPhone, iOS9, xcode7, objective-c, の初心者です。
加速度センサーを用いて、人体背部の傾斜を計測しています。
時刻の開始は、

- (void)viewDidLoad
{ [NSTimer
   scheduledTimerWithTimeInterval:0.1
   target:self
   selector:@selector(update)
   userInfo:nil
   repeats:YES];
   [super viewDidLoad];
   [self startAnimation];
// 中略
]

画面の日付と時刻は、常時、秒を刻んでいます。
[start] ボタンを押して、前屈した人体背部をなぞり、[stop]を押します。
[stop]内で、下図が出た時点のスクショをしたいのですが、この時、時刻表示を一時的に止めたいのです。
後の解析のため、この計測時の時刻を専用用紙に書き写してもいます。(個体を同定するため)
また、次の被検者の測定のため [start]ボタンをおしたら、通常の時刻表示(時分秒:最初と同じ状態)に戻したいです。
どなたか、よいアイデアありましたら、ご教示、宜しくお願い致します。

イメージ説明

- (void)update {
    NSDate *now =[NSDate date];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy/MM/dd   HH:mm:ss"];

    self.Time_Label.text = [df stringFromDate:now];

    [df setDateFormat:@"ss"];
    s = [[df stringFromDate:now] intValue];
    [df setDateFormat:@"mm"];
    m = [[df stringFromDate:now] intValue];
    [df setDateFormat:@"HH"];

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • TakeOne

    2016/05/24 20:30 編集

    「時計が止まりません」と言われても、どうやってタイマーを起動して時計を表示しているのかの説明やコードもないのに、止め方についてアドバイスしようがありません。「[start]ボタンをおしたら、通常の時刻表示に戻したいです」というのも、「通常の」時刻表示というのとstartボタンを押す前の「通常でない」時刻表示というのが、それぞれどういうものか(どう違うのか)説明しないと何がしたいのかわかりません。

    キャンセル

回答 1

checkベストアンサー

+1

どうやってタイマーを起動しているか追記いただいたので、その停止方法をアドバイスします。

まず、ViewController内にNSTimerを保持できるプロパティかインスタンス変数を作成します。

// インスタンス変数の作成例
@implementation ViewController {
    NSTimer *_timer;
}


タイマー起動時は、起動したタイマーをその変数に格納します。

// タイマー起動処理
_timer = [NSTimer
   scheduledTimerWithTimeInterval:0.1
   target:self
   selector:@selector(update)
   userInfo:nil
   repeats:YES];


stopボタンを押したタイミングで、起動したタイマーに対してinvalidateメソッドを実行するとタイマーを停止/削除できるので、
これで現在時刻の表示を一時停止できます。

// stopボタンを押した時のタイマー停止処理
[_timer invalidate];
_timer = nil;


「[start]ボタンをおしたら、通常の時刻表示(時分秒:最初と同じ状態)に戻したい」というのが、一時停止中の現在時刻表示を再開始したいという意味であれば、startボタンを押したタイミングでまたタイマーを起動させればよいです。
その際、最初はviewDidLoadで起動するつもりなのであれば、startボタンを押した時にタイマー二重起動にならないよう、_timerがnilか確認してから起動する必要があります。

// startボタンを押した時のタイマー開始処理
if (_timer == nil) {
    _timer = [NSTimer
       scheduledTimerWithTimeInterval:0.1
       target:self
       selector:@selector(update)
       userInfo:nil
       repeats:YES];
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/25 17:39

    ご回答、ありがとうございました。お陰様で、計測後の時刻表示の停止と、スタート後の時刻再表示、うまくいきました。 今後とも、宜しくお願い致します。 
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる