質問に答える → あなたの健康率は〇〇%ですと表示 → chartsにグラフを表示
させるアプリを作成しています。
ここで1つ困っていることがありまして、ユーザーの〇〇%の数値はy軸に反映させることができたのですが、
x軸に1回目、2回目、、、 などと表示させる所で、自分で入力していくといつか限界がきてしまうので、限りなく回数が続くようにx軸に関するコードを完成させたいです。
userDefaultsなどを使う場合、どのようにコードを入力すれば、解決するでしょうか。
userDefaults以外にも、何か解決案がありましたら、教えていただきたいです。
swift
1import UIKit 2import Charts 3 4class graphViewController: UIViewController { 5 6 var lineChartView:LineChartView! 7 var result:Int = 0 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 self.view.backgroundColor = UIColor.white 13 14 15 setupLineChartView() 16 setupData() 17 18 } 19 20 func setupLineChartView(){ 21 let lineChartView:LineChartView = LineChartView() 22 lineChartView.frame = self.view.frame 23 self.view.addSubview(lineChartView) 24 25 self.lineChartView = lineChartView 26 27 } 28 29 func setupData() { 30 31 var lineChartEntry = [ChartDataEntry]() 32 for i in 1...20 { 33 let chartData = ChartDataEntry(x:Double(i),y:Double(result)) 34 lineChartEntry.append(chartData) 35 36 } 37 let gradientColors = [UIColor.blue.cgColor,UIColor.clear.cgColor] as CFArray 38 let colorLocations:[CGFloat] = [1.0,0.0] 39 let gradient = CGGradient.init(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: gradientColors, locations: colorLocations) 40 41 let line = LineChartDataSet(entries:lineChartEntry, label: "score") 42 line.colors = [NSUIColor.black] 43 line.fill = Fill.fillWithLinearGradient(gradient!, angle: 90.0) 44 line.drawFilledEnabled = true 45 line.mode = .horizontalBezier 46 47 let data = LineChartData() 48 data.addDataSet(line) 49 50 lineChartView.data = data 51 lineChartView.chartDescription?.text = "ヘルスケアアプリ" 52 } 53 54}
swift
1import UIKit 2 3 4// クイズ1つの問題がどんな値を扱うかうか 5//情報が更新されることはないので、構造体にする 6struct Quiz { 7 8 let text: String 9 let optionOne: String 10 let optionTwo: String 11 12 let optionThree: String 13 14 // Initializer(イニシャライザ) = 初期化処理 15 init(text: String, optionOne: String, optionTwo: String, optionThree: String) { 16 self.text = text 17 self.optionOne = optionOne 18 self.optionTwo = optionTwo 19 self.optionThree = optionThree 20 21 } 22 23 24}
swift
1import UIKit 2 3class nextViewController: UIViewController { 4 5 // MARK: - IBOutlet 6 7 @IBOutlet var quizNumberLabel: UILabel! 8 @IBOutlet var quizTextView: UITextView! 9 @IBOutlet var optionOneButton: UIButton! 10 @IBOutlet var optionTwoButton: UIButton! 11 @IBOutlet var optionThreeButton: UIButton! 12 13 // MARK: - Properties 14 15 var point: Int = 0 16 var quizNumber: Int = 0 17 var quizArray: [Quiz] = [] 18 19 // MARK: - Lifecycle 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 optionOneButton.center = self.optionOneButton.center 25 optionOneButton.setTitleColor(.white, for: UIControl.State.normal) 26 optionOneButton.layer.borderWidth = 2 27 optionOneButton.layer.borderColor = UIColor.black.cgColor 28 optionOneButton.layer.cornerRadius = 10 29 30 optionTwoButton.center = self.optionTwoButton.center 31 optionTwoButton.layer.borderWidth = 2 32 optionTwoButton.layer.borderColor = UIColor.black.cgColor 33 optionTwoButton.layer.cornerRadius = 10 34 35 optionThreeButton.center = self.optionThreeButton.center 36 optionThreeButton.layer.borderWidth = 2 37 optionThreeButton.layer.borderColor = UIColor.black.cgColor 38 optionThreeButton.layer.cornerRadius = 10 39 40 41 42 setUpQuiz() 43 showQuiz() 44 } 45 46 // MARK: - UI 47 48 func setUpQuiz() { 49 50 let quiz1 = Quiz(text: "毎日3食食べましたか?", optionOne:"はい", optionTwo:"時々食べた", optionThree: "食べていない") 51 let quiz2 = Quiz(text: "決まった時間にご飯を食べていますか?", optionOne: "食べている", optionTwo: "時々食べる", optionThree: "食べていない") 52 let quiz3 = Quiz(text: "果物を1日1回は食べていますか?", optionOne: "はい", optionTwo: "時々食べる", optionThree: "食べていない") 53 let quiz4 = Quiz(text: "野菜を十分に食べていますか?", optionOne: "食べている", optionTwo: "日による", optionThree: "食べていない") 54 let quiz5 = Quiz(text: "インスタンス食品は食べましたか?", optionOne: "食べていない", optionTwo: "時々食べた", optionThree: "よく食べた") 55 let quiz6 = Quiz(text: "タバコを吸いましたか?", optionOne: "吸わない", optionTwo: "たまに吸う", optionThree: "たくさん吸う") 56 let quiz7 = Quiz(text: "お酒を飲みましたか?", optionOne: "飲まない", optionTwo: "たまに飲んだ", optionThree: "飲まない") 57 let quiz8 = Quiz(text: "運動して体を動かしましたか?", optionOne: "動かした", optionTwo: "たまに動かした", optionThree: "動かしていない") 58 let quiz9 = Quiz(text: "翌日まで疲れが残ることがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 59 let quiz10 = Quiz(text: "食欲がない時がありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 60 let quiz11 = Quiz(text: "原因不明の下痢などが起こりますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 61 let quiz12 = Quiz(text: "朝スッキリ起きられない時がありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 62 let quiz13 = Quiz(text: "中々寝付けないことがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 63 let quiz14 = Quiz(text: "何事にもやる気が起きにくいですか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 64 let quiz15 = Quiz(text:"色々なことに関心が薄くなりますか?", optionOne: "特にない", optionTwo: "時々ある",optionThree: "よくある") 65 let quiz16 = Quiz(text: "体調を崩しやすいですか?", optionOne: "特にない", optionTwo: "時期による", optionThree: "よく崩す") 66 let quiz17 = Quiz(text: "未来について妙に焦ることがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 67 let quiz18 = Quiz(text: "些細なことで腹が立つことがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 68 let quiz19 = Quiz(text: "肌荒れの症状が出ることがありますか?", optionOne: "特にない", optionTwo: "少し荒れる", optionThree: "よく荒れる") 69 let quiz20 = Quiz(text: "睡眠は十分に取れていますか?", optionOne: "取れている", optionTwo: "日による", optionThree: "取れていない") 70 71 quizArray.append(quiz1) 72 quizArray.append(quiz2) 73 quizArray.append(quiz3) 74 quizArray.append(quiz4) 75 quizArray.append(quiz5) 76 quizArray.append(quiz6) 77 quizArray.append(quiz7) 78 quizArray.append(quiz8) 79 quizArray.append(quiz9) 80 quizArray.append(quiz10) 81 quizArray.append(quiz11) 82 quizArray.append(quiz12) 83 quizArray.append(quiz13) 84 quizArray.append(quiz14) 85 quizArray.append(quiz15) 86 quizArray.append(quiz16) 87 quizArray.append(quiz17) 88 quizArray.append(quiz18) 89 quizArray.append(quiz19) 90 quizArray.append(quiz20) 91 92 } 93 94 func showQuiz() { 95 //クイズ番号、クイズ、各選択肢の表示 96 quizNumberLabel.text = String(quizNumber + 1) + "問目" 97 quizTextView.text = quizArray[quizNumber].text 98 99 UIView.setAnimationsEnabled(false) 100 optionOneButton.setTitle(quizArray[quizNumber].optionOne , for:.normal ) 101 optionOneButton.layoutIfNeeded() 102 optionTwoButton.setTitle(quizArray[quizNumber].optionTwo, for: .normal) 103 optionTwoButton.layoutIfNeeded() 104 optionThreeButton.setTitle(quizArray[quizNumber].optionThree, for: .normal) 105 optionThreeButton.layoutIfNeeded() 106 UIView.setAnimationsEnabled(true) 107 } 108 109 func resetQuiz() { 110 point = 0 111 quizNumber = 0 112 showQuiz() 113 } 114 115 116 func updataQuiz() { 117 if quizNumber >= 19 { 118 // 全て完了時の処理 画面遷移するみたいなのでここは消してください 119 performSegue(withIdentifier: "toSecond", sender: nil) 120 //self.performSegue(withIdentifier: "toSecond", sender: nil) 121 } else { 122 quizNumber = quizNumber + 1 123 showQuiz() 124 } 125 } 126 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 127 if segue.identifier == "toSecond" { 128 let resultVC = segue.destination as! resultViewController 129 resultVC.result = point 130 131 } 132 } 133 // MARK: - IBAction 134 135 @IBAction func pushOptionOneButton() { 136 // Option1 のボタンを押したのでPointに5%加算 137 point += 5 138 updataQuiz() 139 140 } 141 142 @IBAction func pushOptionTwoButton() { 143 // Option2 のボタンを押したのでPointに3%加算 144 point += 3 145 updataQuiz() 146 } 147 148 @IBAction func pushOptionThreeButton() { 149 // Option3 のボタンを押したのでPointに1%加算 150 point += 1 151 updataQuiz() 152 } 153 154}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/10 16:20
2019/09/10 16:22
2019/09/10 18:18
2019/09/11 03:57
2019/09/11 23:11 編集
2019/09/12 09:04