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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

490閲覧

ストップウォッチの数字が揺れてしまいます。

aaaaaachannel

総合スコア37

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/11/08 06:33

ストップウォッチのアプリを作ったのですが、秒数をカウントする際に数字が揺れてしまいます。
何が原因なのでしょうか?

swift

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 @IBOutlet weak var stopButton: UIButton! 7 @IBOutlet weak var startButton: UIButton! 8 @IBOutlet weak var recetButton: UIButton! 9 @IBOutlet weak var labelTimer: UILabel! 10 11 var timer = Timer() 12 var startTime:TimeInterval = 0 13 var elapsedTime:Double = 0.0 14 var time:Double = 0.0 15 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 // Do any additional setup after loading the view, typically from a nib. 20 } 21 22 override func didReceiveMemoryWarning() { 23 super.didReceiveMemoryWarning() 24 // Dispose of any resources that can be recreated. 25 } 26 27 @IBAction func stopButton(_ sender: Any) { 28 startButton.isEnabled = true 29 recetButton.isEnabled = true 30 31 stopButton.isEnabled = false 32 timer.invalidate() 33 elapsedTime = time 34 } 35 36 @IBAction func startButton(_ sender: Any) { 37 startButton.isEnabled = false 38 recetButton.isEnabled = false 39 40 stopButton.isEnabled = true 41 42 startTime = Date().timeIntervalSince1970 43 44 timer = Timer.scheduledTimer(timeInterval: 0.01, target: self,selector: #selector(self.update),userInfo:nil, repeats: true) 45 46 } 47 48 func update(){ 49 time = Date().timeIntervalSince1970 - startTime + elapsedTime 50 51 //整数(Int)と小数分割 52 let sec = Int(time) 53 let msec = Int((time - Double(sec))*100) 54 55 //表示 56 let displayStr = NSString(format:"%02d:%02d.%02d", sec/60, sec%60, msec) as String 57 labelTimer.text = displayStr 58 } 59 60 @IBAction func recetButton(_ sender: Any) { 61 elapsedTime = 0.0 62 labelTimer.text = "00:00.00" 63 } 64} 65 66

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

システムフォントは等幅でないためではないでしょうか。
等幅フォントを使うか、一桁ずつラベルを分割するかすればいいと思います。

投稿2017/11/08 07:59

u39ueda

総合スコア950

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaachannel

2017/11/14 06:58

その通りでした。ありがとうございます。
guest

0

UILabelのフォント(San Francisco?)が等幅でないからですね。
UIFont.monospacedDigitSystemFontOfSizeメソッドで等幅のUIFontを作ってlabelTimer.fontを変更しましょう。

投稿2017/11/08 08:03

de9

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Swiftの事は知りませんが、小数点以下も表示していますか?

4.999 ⇒ 4.999 と表示
5.000 ⇒ 5 と表示
5.001 ⇒ 5.001 と表示
5.010 ⇒ 5.01 と表示
5.100 ⇒ 5.1 と表示

これで表示がぶれている可能性があります。
見当違いだったらすみません。

投稿2017/11/08 07:11

編集2017/11/08 07:12
torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問