teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードを追記しました

2016/08/01 02:42

投稿

lyzmfeqpxs54
lyzmfeqpxs54

スコア237

title CHANGED
File without changes
body CHANGED
@@ -9,4 +9,102 @@
9
9
  また、どのように同期させればよいでしょうか。
10
10
 
11
11
 
12
- ご教示のほどよろしくお願いいたします。
12
+ ご教示のほどよろしくお願いいたします。
13
+
14
+
15
+ 下記にコードを記載しました。また、詳細を記載させていただきます。
16
+ 内容としてはtimeFormat()で制限時間が20.00から0.00までカウントダウンするものにNStimerを使用しており、timerbar()で制限時間バーが20秒かけて減少するようにしております。
17
+
18
+ これとは別にアニメーション(問題表示)をおこなっておりその時間が数秒に渡る場合カウントダウンが0になる前にバーが減少しきってしまいます。そのアニメーション(問題表示)が1秒以内であればあまり気にならない程度なのですが、数秒の場合カウントダウンが0になるのとバーの減少に1秒以上の差が出てきてしまいます。
19
+
20
+ ```swift
21
+
22
+ //制限時間の数字表示
23
+ private var timerLabel: UILabel!
24
+ //制限時間バー
25
+ private var myImageView: UIImageView!
26
+
27
+ var timer = NSTimer()
28
+ var countNum = 0
29
+
30
+ // スクリーン画面のサイズを取得
31
+ let scWid: CGFloat = UIScreen.mainScreen().bounds.width //画面の幅
32
+ let scHei: CGFloat = UIScreen.mainScreen().bounds.height //画面の高さ
33
+
34
+ //制限時間の表示
35
+ func timerLimit(){
36
+
37
+ // UILabelを作成する.
38
+ timerLabel = UILabel(frame: CGRectMake(scWid*0.79 ,scHei*0.4375 ,scWid*0.11 ,scHei*0.025))
39
+ timerLabel.font = UIFont.boldSystemFontOfSize(scHei*0.018)
40
+ timerLabel.textColor = UIColor.whiteColor()
41
+ self.view.addSubview(timerLabel)
42
+ }
43
+
44
+ func update() {
45
+ countNum += 1
46
+ timeFormat(countNum)
47
+ }
48
+
49
+ //制限時間の数字の表示
50
+ func timeFormat(countNum:Int) {
51
+
52
+ let ms = countNum % 100
53
+ let s = countNum / 100
54
+ timerLabel.text = String(format: "%02d.%02d", 19-s, 100-ms)
55
+
56
+ }
57
+
58
+ //制限時間追加メソッド
59
+ func timermethod(){
60
+ countNum = 0
61
+ timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(KenteiViewController.update), userInfo: nil, repeats: true)
62
+ // Run loopに登録する
63
+ NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
64
+ }
65
+
66
+ //制限時間を止めるメソッド
67
+ func timerStop(){
68
+ timer.invalidate()
69
+ }
70
+
71
+
72
+
73
+ //制限時間バー(オレンジ色のバー)の表示
74
+ func timerbar(){
75
+ let barHeight = scHei*0.02
76
+ let barWidth = scWid*0.66
77
+ let barXPosition = scWid*0.08
78
+ let barYPosition = scHei*0.44
79
+ let barXPositionEnd = barXPosition + barWidth
80
+ // UIImageViewを作成する.
81
+ myImageView = UIImageView()
82
+ // 表示する画像を設定する.
83
+ let myImage = UIImage(named: "timebar.png")
84
+ // 画像をUIImageViewに設定する.
85
+ myImageView.image = myImage
86
+ // 画像の表示する座標を指定する.
87
+ myImageView.frame = CGRectMake(barXPosition ,barYPosition ,barWidth ,barHeight)
88
+ // UIImageViewをViewに追加する.
89
+ self.view.addSubview(myImageView)
90
+
91
+ UIView.animateWithDuration(20, delay: 0.0, options : UIViewAnimationOptions.CurveLinear, animations: {() -> Void in
92
+ self.myImageView.frame = CGRectMake(barXPositionEnd, barYPosition, 0, barHeight)
93
+ },
94
+ completion: {(finished: Bool) -> Void in
95
+ // アニメーション終了後の処理
96
+ print("制限時間バーは\(finished)")
97
+ })
98
+
99
+ }
100
+
101
+
102
+ override func viewDidLoad() {
103
+ super.viewDidLoad()
104
+
105
+ //制限時間ラベルの表示
106
+ timerLimit()
107
+ //制限時間をつけるメソッドを呼び出す
108
+ timermethod()
109
+ }
110
+ ```