初心者用のプログラミング教材を見ながらやっています。
このコードだとエラーは出ないのですが、クイズ正解数0〜2の時に画面遷移が起こりません。
クイズ正解数0〜2の時は「text = "動物に関してあまり興味はないでしょうか? \n\nもっと頑張りましょう!"」のところに「Thread1:breakpoint1.1」と出て、それを押すと「Move the instruction pointer?」と出ます。
初心者で下手にいじることも出来ず困っています。
もし分かる方がいましたら助けてください。
よろしくお願いします。
swift
1import UIKit 2 3class QuizViewController: UIViewController { 4 5 @IBOutlet weak var label: UILabel! 6 var nameText: String = "" 7 8 @IBOutlet weak var quizCard: QuizCard! 9 let manager: QuizManager = QuizManager() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 16 self.quizCard.style = .initial 17 self.loadQuiz() 18 let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(dragQuizCard(_:))) 19 self.quizCard.addGestureRecognizer(panGestureRecognizer) 20 } 21 22 func loadQuiz() { 23 // クイズの問題文を表示 24 self.quizCard.quizLabel.text = manager.currentQuiz.text 25 // クイズの画像を表示 26 self.quizCard.quizImageView.image = UIImage(named: manager.currentQuiz.imageName) 27 } 28 29 func answer () { 30 //移動するCGAffineTransformオブジェクト(1) 31 var translationTransform: CGAffineTransform 32 // x軸方向の移動距離 33 let screenWidth = UIScreen.main.bounds.width 34 // y軸方向の移動距離 35 let y = UIScreen.main.bounds.height * 0.2 36 37 // 回答によってtranslationTransformの内容を変える(2) 38 if self.quizCard.style == .right { 39 //○回答のときは右へ移動 40 translationTransform = CGAffineTransform(translationX: screenWidth, y: y) 41 self.manager.answerQuiz(answer: true) 42 } else { 43 // ×回答のときは左へ移動 44 translationTransform = CGAffineTransform(translationX: -screenWidth, y: y) 45 self.manager.answerQuiz(answer: false) 46 } 47 48 // クイズのカードをアニメーションさせて移動する(3) 49 // 0.1秒遅延させて0.5秒でカードを移動する 50 UIView.animate(withDuration: 0.5, delay: 0.1, options: [.curveLinear], animations: { 51 // クイズのカードのtransform = translationTransform 52 }, completion: { [unowned self] (finished) in 53 if finished { 54 self.showNextQuiz() 55 } 56 }) 57 } 58 59 func showNextQuiz() { 60 // 次のクイズを取得 61 self.manager.nextQuiz() 62 //クイズに回答中か回答済みかで処理を分岐 63 switch manager.status { 64 case .inAnswer: 65 // transformプロパティに加えられた変更をリセットし、 66 // クイズのカードを元の位置に 67 self.quizCard.transform = CGAffineTransform.identity 68 // カードの状態を初期状態に 69 self.quizCard.style = .initial 70 // クイズを表示 71 self.loadQuiz() 72 case .done: 73 // カードを非表示にして結果画面へ遷移 74 self.quizCard.isHidden = true 75 self.performSegue(withIdentifier: "goToResult",sender: nil) 76 } 77 } 78 79 80 @objc func dragQuizCard(_ sender: UIPanGestureRecognizer){ 81 switch sender.state { 82 case .began, .changed: 83 self.transformQuizCard(gesture: sender) 84 case .ended: 85 self.answer() 86 default: 87 break 88 } 89 90 } 91 92 func transformQuizCard(gesture: UIPanGestureRecognizer){ 93 let translation = gesture.translation(in: self.quizCard) 94 let translationTransform = CGAffineTransform(translationX: translation.x, y: translation.y) 95 let translationPercent = translation.x/UIScreen.main.bounds.width/2 96 let rotationAngle = CGFloat.pi/3 * translationPercent 97 let rotationTransform = CGAffineTransform(rotationAngle: rotationAngle) 98 let transform = translationTransform.concatenating(rotationTransform) 99 self.quizCard.transform = transform 100 101 if translation.x > 0 { 102 self.quizCard.style = .right 103 } else { 104 self.quizCard.style = .wrong 105 } 106 } 107 108 // 画面遷移時に呼ばれるメソッド 109 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 110 // セグエの遷移先が ResultViewController の場合 111 if let resultViewController: ResultViewController = segue.destination as? ResultViewController{ 112 // 名前 113 resultViewController.nameText = self.nameText 114 // クイズのスコア 115 resultViewController.score = self.manager.score 116 } 117 } 118} 119
swift
1import UIKit 2 3class ResultViewController: UIViewController { 4 5 @IBOutlet weak var label: UILabel! 6 @IBOutlet weak var textView: UITextView! 7 8 var nameText: String = "" 9 var score: Int = 0 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 16 self.label.text = "(self.nameText)さん あなたのスコアは(self.score)です。" 17 18 19 var text = "" 20 switch self.score { 21 case 0...2: 22 text = "動物に関してあまり興味はないでしょうか? \n\nもっと頑張りましょう!" 23 case 3,4: 24 text = "動物にはかなり詳しい方ですね! \n\nもう少しです!" 25 case 5: 26 text = "全問正解です! \n\nおめでとうございます!" 27 default: 28 break 29 } 30 self.textView.text = text 31 } 32 33 @IBAction func pushResultButton(_ sender: Any) { 34 self.navigationController?.popViewController(animated: true) 35 }
回答1件
あなたの回答
tips
プレビュー