![イメー7d47904db71cc064555909ab0a47816.png)
ヘルスケアアプリを作成しています。
そこで、ユーザーが質問に答えたデータをもとにそのデータをグラフに反映させたいと考えています。
そのためぬは変数をもとにグラフにくっつけるような考えかな?となんとなく思っています。
何か良い考えなどがありましたらぜひご提示お願いいたします。
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 resultViewController: UIViewController { 4 5 @IBOutlet var label:UILabel! 6 7 //ここにpointを渡す 8 var result :String = "" 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 label.text = String(result) 14 15 16 // Do any additional setup after loading the view. 17 } 18 19 override func didReceiveMemoryWarning() { 20 super.didReceiveMemoryWarning() 21 // Dispose of any resources that can be recreated. 22 } 23 24 25 26 27}
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 setUpQuiz() 25 showQuiz() 26 } 27 28 // MARK: - UI 29 30 func setUpQuiz() { 31 32 let quiz1 = Quiz(text: "毎日3食食べましたか?", optionOne:"はい", optionTwo:"時々食べた", optionThree: "食べていない") 33 let quiz2 = Quiz(text: "決まった時間にご飯を食べていますか?", optionOne: "食べている", optionTwo: "時々食べる", optionThree: "食べていない") 34 let quiz3 = Quiz(text: "果物を1日1回は食べていますか?", optionOne: "はい", optionTwo: "時々食べる", optionThree: "食べていない") 35 let quiz4 = Quiz(text: "野菜を十分に食べていますか?", optionOne: "食べている", optionTwo: "日による", optionThree: "食べていない") 36 let quiz5 = Quiz(text: "インスタンス食品は食べましたか?", optionOne: "食べていない", optionTwo: "時々食べた", optionThree: "よく食べた") 37 let quiz6 = Quiz(text: "タバコを吸いましたか?", optionOne: "吸わない", optionTwo: "たまに吸う", optionThree: "たくさん吸う") 38 let quiz7 = Quiz(text: "お酒を飲みましたか?", optionOne: "飲まない", optionTwo: "たまに飲んだ", optionThree: "飲まない") 39 let quiz8 = Quiz(text: "運動して体を動かしましたか?", optionOne: "動かした", optionTwo: "たまに動かした", optionThree: "動かしていない") 40 let quiz9 = Quiz(text: "翌日まで疲れが残ることがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 41 let quiz10 = Quiz(text: "食欲がない時がありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 42 let quiz11 = Quiz(text: "原因不明の下痢などが起こりますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 43 let quiz12 = Quiz(text: "朝スッキリ起きられない時がありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 44 let quiz13 = Quiz(text: "中々寝付けないことがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 45 let quiz14 = Quiz(text: "何事にもやる気が起きにくいですか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 46 let quiz15 = Quiz(text:"色々なことに関心が薄くなりますか?", optionOne: "特にない", optionTwo: "時々ある",optionThree: "よくある") 47 let quiz16 = Quiz(text: "体調を崩しやすいですか?", optionOne: "特にない", optionTwo: "時期による", optionThree: "よく崩す") 48 let quiz17 = Quiz(text: "未来について妙に焦ることがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 49 let quiz18 = Quiz(text: "些細なことで腹が立つことがありますか?", optionOne: "特にない", optionTwo: "時々ある", optionThree: "よくある") 50 let quiz19 = Quiz(text: "肌荒れの症状が出ることがありますか?", optionOne: "特にない", optionTwo: "少し荒れる", optionThree: "よく荒れる") 51 let quiz20 = Quiz(text: "睡眠は十分に取れていますか?", optionOne: "取れている", optionTwo: "日による", optionThree: "取れていない") 52 53 quizArray.append(quiz1) 54 quizArray.append(quiz2) 55 quizArray.append(quiz3) 56 quizArray.append(quiz4) 57 quizArray.append(quiz5) 58 quizArray.append(quiz6) 59 quizArray.append(quiz7) 60 quizArray.append(quiz8) 61 quizArray.append(quiz9) 62 quizArray.append(quiz10) 63 quizArray.append(quiz11) 64 quizArray.append(quiz12) 65 quizArray.append(quiz13) 66 quizArray.append(quiz14) 67 quizArray.append(quiz15) 68 quizArray.append(quiz16) 69 quizArray.append(quiz17) 70 quizArray.append(quiz18) 71 quizArray.append(quiz19) 72 quizArray.append(quiz20) 73 74 } 75 76 func showQuiz() { 77 //クイズ番号、クイズ、各選択肢の表示 78 quizNumberLabel.text = String(quizNumber + 1) + "問目" 79 quizTextView.text = quizArray[quizNumber].text 80 81 UIView.setAnimationsEnabled(false) 82 optionOneButton.setTitle(quizArray[quizNumber].optionOne , for:.normal ) 83 optionOneButton.layoutIfNeeded() 84 optionTwoButton.setTitle(quizArray[quizNumber].optionTwo, for: .normal) 85 optionTwoButton.layoutIfNeeded() 86 optionThreeButton.setTitle(quizArray[quizNumber].optionThree, for: .normal) 87 optionThreeButton.layoutIfNeeded() 88 UIView.setAnimationsEnabled(true) 89 } 90 91 func resetQuiz() { 92 point = 0 93 quizNumber = 0 94 showQuiz() 95 } 96 97 98 func updataQuiz() { 99 if quizNumber >= 19 { 100 // 全て完了時の処理 画面遷移するみたいなのでここは消してください 101 performSegue(withIdentifier: "toSecond", sender: nil) 102 //self.performSegue(withIdentifier: "toSecond", sender: nil) 103 } else { 104 quizNumber = quizNumber + 1 105 showQuiz() 106 } 107 } 108 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 109 if segue.identifier == "toSecond" { 110 let resultVC = segue.destination as! resultViewController 111 resultVC.result = "あなたの健康率は(point)%です" 112 } 113 } 114 // MARK: - IBAction 115 116 @IBAction func pushOptionOneButton() { 117 // Option1 のボタンを押したのでPointに5%加算 118 point += 5 119 updataQuiz() 120 121 } 122 123 @IBAction func pushOptionTwoButton() { 124 // Option2 のボタンを押したのでPointに3%加算 125 point += 3 126 updataQuiz() 127 } 128 129 @IBAction func pushOptionThreeButton() { 130 // Option3 のボタンを押したのでPointに1%加算 131 point += 1 132 updataQuiz() 133 } 134 135}
swift
1 2import UIKit 3import Charts 4 5class graphViewController: UIViewController { 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 var rect = view.bounds 10 rect.origin.y += 20 11 rect.size.height -= 20 12 let barChartView = BarChartView(frame: rect) 13 let entry = [ 14 BarChartDataEntry(x: 10, y: 30), 15 BarChartDataEntry(x: 20, y: 20), 16 BarChartDataEntry(x: 30, y: 40), 17 BarChartDataEntry(x: 40, y: 10), 18 BarChartDataEntry(x: 50, y: 30) 19 ] 20 let set = [ 21 BarChartDataSet(entries: entry, label: "Data") 22 ] 23 barChartView.data = BarChartData(dataSets: set) 24 view.addSubview(barChartView) 25 } 26}
どんなグラフを想定していますか?
質問に答えたデータというのは選択肢ごとのデータでしょうか?
折れ線グラフや棒グラフを想定しています。
1〜20問までA B C 3つの質問に答えてもらい、それぞれ5%、3%、1%の数字を代入し、答え切ったら健康率は〇〇%です!というものを想定しています。
その〇〇%という数字をグラフに反映させたいと考えています。
丸投げの質問になってしまっているようで申し訳ありません。。
であれば結果を表示するViewControllerにその%を渡し、
Chartsでその%を表示するようにすればいいと思います。
ただ、現状ではデータの保存などは行っていないようなので
1人分のデータしか取ることができないと思います。
自分の端末のこのアプリをインストールしておき、
そこで答えた人全員のデータを表示させたい場合はローカルにデータを保存するだけで実現することができると思いますが、
アプリをストアなどで配布し、個人の端末で使ってもらう場合はサーバーなどにデータをアップロードする必要があると思います。
結果を表示するviewcontrollerに%表示は先ほど完了したのですが、あとは
chartsに%を表示させる方法で悩んでいます。
今の所は時間の都合もあるのでローカルにデータを保存するところを考えています。
ローカルに保存するとなるとデータベースが必要なので、
一番手っ取り早いのはUserDefaultsで簡易的に保存する方法ですね。
時間があるということならRealmを使ってもいいと思います。
そこで保存したデータを結果を表示するViewControllerで読み込んで、
Chartsに表示させるだけなのでそこまで時間はかからないと思います。
あとこの質問で得たい回答は何でしょうか?
どういう部分が分からないのかを教えていただけるともう少し具体的に回答できると思います。
すみません。
chartsのグラフに結果の%を反映させる方法を教えていただきたいです。
わかりました。
とりあえず現状どこまでできているのか教えていただけますか?
Chartsの使い方はある程度わかっていて、グラフの表示はだけはできている感じですか?
ただ、自分はChartsは使ったことがないのであまり詳しいアドバイスはできないかもしれません...
かしこまりました。
はい、グラフの表示はできる状態です。
自分は、resultviewcontrollerの健康率は〇〇%です!の〇〇にpoint変数を代入しているので、グラフのy座標にpointを代入すればいけると思って試したのですが、エラーが起きてしまったのですが、方向性はこんな感じで考えています。
なるほど、なら本当にあと少しですね。
できればそのグラフを表示している部分とエラーが出たコードが見たいので、
質問に追記していただけませんか?
そうなんですよね。。。
追記致しました。
よろしくお願いい致します。
追記ありがとうございます。
エラーが出たのはgraphViewControllerですか?
軽く見た感じ問題なさそうですが、どんなエラーになりますか?
はい、graphviewcpntrollerです。
y座標にpointを入れたら、
Use of unresolved identifier 'point'; did you mean 'print'?
というエラーが出ました。
printにスペルミスしてますよ。pointじゃないですか?
そもそもgraphViewControllerにはpointという変数はないんじゃないでしょうか?
pointという変数自体ありませんが、point変数を共有したいため変数に代入したりしているのですが、なかなかうまくいかない状態です。
異なるviewcontroller同士で変数を共有できる方法を調べて試しているのですがうまくいかないので、何か方法がありましたら意見をいただきたいです。
resultViewControllerのpointをgraphViewControllerに渡す感じですか?
nextViewControllerのpointをgraphViewControllerに渡すのではダメなのでしょうか?
できればどのように画面遷移をするのか教えていただけないでしょうか?
すいません返答が悪かったです。
nextViewControllerのpointをgraphViewControllerに渡したいと思っています。
最後のresultViewControllerに ”グラフを見て確認する”ボタンを設置してそのボタンを押したらgraphVireControllerに遷移させたいと考えています。
なるほど
ということは遷移的には
nextViewController -> resultViewController -> graphViewController という順番の遷移になりますか?
現在はそう考えています!
ありがとうございます。理解しました。
あと確認なんですが、resultViewControllerやgraphViewControllerはMain.storyboardに全て入っている感じですか?
説明がいつも下手ですみません。
はい。もう全てMain.storyboardに配置してあります。
回答1件
あなたの回答
tips
プレビュー