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

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

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

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

Swift

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

Q&A

解決済

1回答

918閲覧

画面遷移後Quizの表示画面を全問FullScreenにしたい

chiyoko

総合スコア1

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/08/13 09:01

編集2020/08/14 05:03

xcode:Version 11.5
macOS Catalina 10.15.6
の環境にてアプリの制作をしています。
超初心者です。

Quizのアプリを制作しております。
そのQuiz画面を全問フルスクリーンする方法はありますでしょうか?
First View Controller からQuizに画面遷移するSegueの設定は現在
Storyboard Segueにて
Kind> Present Modally
Presentation> Full Screen
Transition> Cover Vertical
となっており1問目の表示はFullScreenとなりますが2問目からはFull Screenになりません。

現在問題文の最後の方になりますと次の問題うつる時の表示時間が重くなり、遅くなっています。
問題文全部をFullScreenで表示できれば遅くなる問題が解決できるのではないかと思いまして質問いたします。

どうぞよろしくお願いいたします。
Q1の時はFullScreenで表示されるのですが!
Q2以降FullScreenではなくなります。Q2以降もFUllScreenで表示する方法はありますか?

swift

1import UIKit 2import AudioToolbox 3 4 5class HistoryQuestionViewController: UIViewController { 6 7 var questionData: HistoryQuestionData! 8 9 10 11 @IBOutlet weak var questionNoLabel: UILabel! 12 @IBOutlet weak var questionTextView: UITextView! 13 14 @IBOutlet weak var answer1Button: UIButton! 15 @IBOutlet weak var answer2Button: UIButton! 16 @IBOutlet weak var answer3Button: UIButton! 17 @IBOutlet weak var answer4Button: UIButton! 18 19 20 @IBOutlet weak var correctImageView: UIImageView! 21 @IBOutlet weak var IncorrectImageView: UIImageView! 22 23 @IBOutlet weak var goToTitle: UIButton! 24 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 29 // Do any additional setup after loading the view. 30 31 32 //初期データ設定処理。全画面で設定済みのquestionDataから値を取り出す。 33 questionNoLabel.text = "Q(questionData.questionNo)" 34 questionTextView.text = questionData.question 35 answer1Button.setTitle(questionData.answer1, for: UIControl.State.normal) 36 answer2Button.setTitle(questionData.answer2, for: UIControl.State.normal) 37 answer3Button.setTitle(questionData.answer3, for: UIControl.State.normal) 38 answer4Button.setTitle(questionData.answer4, for: UIControl.State.normal) 39 40 } 41 42 @IBAction func tapAnswer1Button(_ sender: Any) { 43 questionData.userChoiceAnswerNumber = 1 44 goNextQuestionWithAnimation() 45 } 46 47 @IBAction func tapAnswer2Button(_ sender: Any) { 48 questionData.userChoiceAnswerNumber = 2 49 goNextQuestionWithAnimation() 50 } 51 52 @IBAction func tapAnswer3Button(_ sender: Any) { 53 questionData.userChoiceAnswerNumber = 3 54 goNextQuestionWithAnimation() 55 } 56 57 @IBAction func tapAnswer4Button(_ sender: Any) { 58 questionData.userChoiceAnswerNumber = 4 59 goNextQuestionWithAnimation() 60 } 61 62 //次の問題にアニメーション付きで進む 63 func goNextQuestionWithAnimation() { 64 //正解しているか判定する 65 if questionData.isCorrect() { 66 //正解のアニメーションを再生しながら次の問題へ遷移する 67 goNextQuestionWithCorrectAnimation() 68 } else { 69 //不正解のアニメーションを再生しながら次の問題へ遷移する。 70 goNextQuestionWithIncorrectAnimation() 71 72 } 73 } 74 75 //次の問題に正解のアニメーション付きで遷移する 76 func goNextQuestionWithCorrectAnimation() { 77 //正解を伝える音を鳴らす 78 AudioServicesPlayAlertSound(1025) 79 80 //アニメーション 81 UIView.animate(withDuration: 1.0, animations: { 82 //アルファ値を1.0に変化させる(初期値はStoryboardで0.0に設定ずみ) 83 self.correctImageView.alpha = 1.0 84 }) { 85 (Bool) in self.goNextQuestion() //アニメーション完了後に次の問題に進む 86 87 } 88 } 89 90 //次の問題に不正解のアニメーション付きでする 91 func goNextQuestionWithIncorrectAnimation() { 92 93 //不正解を伝える音を鳴らす 94 AudioServicesPlayAlertSound(1006) 95 96 //アニメーション 97 UIView.animate(withDuration: 1.0, animations: { 98 //アルファ値を1.0に変化させる(初期値はStoryboardで0.0に設定ずみ) 99 self.IncorrectImageView.alpha = 1.0 100 }) { 101 (Bool) in self.goNextQuestion() //アニメーション完了後に次の問題に進む 102 103 } 104 } 105 106 func goNextQuestion() { 107 //問題文の取り出し 108 guard let nextQuestion = HistoryQuestionDataManager.sharedInstance.nextQuestion() else { 109 //問題文がなければ結果画面へ遷移する 110 //StoryboardのIdentifierに設定した値(result)を指定して 111 //ViewControllerを生成する 112 if let resultViewController = storyboard?.instantiateViewController(withIdentifier: "historyResult") as? HistoryResultViewController { 113 //Storyboardのsegueを利用しない明示的な画面遷移処理 114 present(resultViewController, animated: true, completion: nil) 115 } 116 return 117 } 118 119 if let nextQuestionViewController = 120 storyboard?.instantiateViewController(withIdentifier: "historyQuestion") 121 as? HistoryQuestionViewController { 122 nextQuestionViewController.questionData = nextQuestion 123 present(nextQuestionViewController, animated: true, 124 completion: nil) 125 } 126 } 127 128 129}

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

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

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

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

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

TsukubaDepot

2020/08/13 09:33

1問目から2問目以降への遷移はどのような手段を使われていますでしょうか。 できれば関連するコードも提示していただいた方がいいかもしれません。
guest

回答1

0

ベストアンサー

そのQuiz画面を全問フルスクリーンする方法はありますでしょうか?
...
となっており1問目の表示はFullScreenとなりますが2問目からはFull Screenになりません。

2問目以降は Segue ではなく、直接インスタンスを作り表示しているので、表示前に表示方法を設定する必要があり日と思います。

たとえば、このような感じになります。

Swift

1 if let nextQuestionViewController = storyboard?.instantiateViewController(withIdentifier: "question") as? QuestionViewController { 2 nextQuestionViewController.questionData = nextQuestion 3 4 // フルスクリーンにする 5 nextQuestionViewController.modalPresentationStyle = .fullScreen 6 7 // storyboardのsegueを利用しない明示的な画面遷移処理 8 present(nextQuestionViewController, animated: true, completion: nil) 9 }

現在問題文の最後の方になりますと次の問題うつる時の表示時間が重くなり、遅くなっています。
問題文全部をFullScreenで表示できれば遅くなる問題が解決できるのではないかと思いまして質問いたします。

なぜ遅くなるのかというと、過去の出題画面を消すことなく、新しい出題画面を表示してしまっているためかと思われます。

おそらく、chiyokoさんは「本気で始める iPhone アプリ作り」という本を参考に作られていると思うのですが、このサンプルの例はちょっと良くないかな、と感じています。

このままの例だと、以前の画面(View Controller)を残したまま次の画面を出しているので、質問が進むにつれてメモリ消費量が増えていってしまいます。

なので、それを防ぐためにはいらなくなった画面を消す(インスタンスを終了させる)必要があるのですが、そのためには全体的に作り替える必要があるかと思います。

投稿2020/08/13 21:31

TsukubaDepot

総合スコア5086

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

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

chiyoko

2020/08/14 05:07

丁寧にありがとうございます。 初心者でそのまま本を参考に作ってみました。 いろんな処理のやり方があるのですね。 色々試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問