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

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

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

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

3275閲覧

【Swift】画面遷移できない

TG1996

総合スコア6

Swift Playground

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2020/04/24 14:41

編集2020/04/24 15:08

初心者用のプログラミング教材を見ながらやっています。

このコードだとエラーは出ないのですが、クイズ正解数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 }

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

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

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

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

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

TsukubaDepot

2020/04/24 14:54

参考にされている教材は誰でも見られるものでしょうか。 見られるのであればURLを示していただいた方がより良い答えが得られるかと思います。 画面遷移ができないのであれば、そもそもperformSegue()が呼ばれる処理に入っていない気がします。 たとえば、 self.performSegue(withIdentifier: "goToResult",sender: nil) の前の行に print("goToResult") のような行を入れたとして、画面遷移をするはずの場所でデバッグウインドウに"goToResult"と表示されますでしょうか。
TsukubaDepot

2020/04/24 14:56

また、その前の行で switch manager.status { と条件分岐をやっていますが、このstatusの値はどこかで更新されているのでしょうか。 これも疑問です。
TG1996

2020/04/24 15:13

教材は本なので他の方は見れません… print("goToResult")を入れたところ、"goToResult"とは表示されました。 switch manager.status { に関しましてはどこを見ればいいのかわかりません… すみません… 追加した情報で何かわからないでしょうか…?
TsukubaDepot

2020/04/24 15:19

最初の内容だと「画面遷移できない」とあったので、別のビューに遷移できないのだと思っていました。 変更された質問内容をみると、おそらくブレークポイントが設定されていることが原因だと思います。 まずはそれを解除してみてください。
guest

回答1

0

ベストアンサー

ブレークポイントが設定されているので、それを解除する必要があります。
おそらく、行番号のところで意図しないままクリックしたのだと思います。

止まった行の行番号のところに青い台形が表示されていると思いますので、そこで Control + クリックしてみてください。
ポップアップメニューが出るので、Delete Breakpointでプレークポイントを解除してみてください。

再度実行すると、次からはそこで止まらなくなります。

投稿2020/04/24 15:18

TsukubaDepot

総合スコア5086

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

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

TG1996

2020/04/24 15:24

ブレークポイントとやらが原因でした! わかりづらい質問の仕方にも関わらず、解決してくださりありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問