冰雪久久乘法表

莫內
彼得潘的 Swift iOS / Flutter App 開發教室
10 min readApr 13, 2020

練習[],func,viewWillAppear,sender的tag,頁面傳值,instantiateViewController,modalPresentationStyle,dismiss

原本只是想稍微試做一下peter 課堂ppt上的小練習,一開始的畫面長這樣。

確實這樣就照著做完了,然後想說,最近姪女在學99乘法,不然做一下99乘法給他玩好了。

後來看了一下這工程畫面,說真的連我都不想玩,只好發揮設計師的能力重新設計了一下版面。

恩,有畫面還是有差,連我都想玩了XD,順便也練習autolayout更熟悉了。但為了美付出的代價就是重做,元件跟程式都重寫,app要改設計相對來說比網頁還麻煩多了。

中間還有個小插曲,在找冰雪奇緣的石頭人還不知道英文叫什麼,原來叫做trolls,害我搜尋什麼stone…rock…都找不到圖

中間頁面傳值部分也遇到卡關,主要在於結果頁要回到開始頁時使用了dismiss回去,這樣回到開始頁時viewDidLoad是不會重做動作,需要使用viewWillAppear搭配把present改為全螢幕的滿版設定才能觸發。

以下兩行來自彼得潘的解救,這卡了我一天啊…

viewWillAppear,controller.modalPresentationStyle = .fullScreen

override func viewWillAppear(_ animated: Bool) {}

來看一下完成作品。

當然還有很多東西沒完善,包含亂數出題,亂數答案,亂數角色圖片,之後再慢慢補齊功能。

語法有點笨,但先求完成再說。if else應該換成switch。

import UIKit

class FirstViewController: UIViewController {


var number = 0
var addscore = 0
var score = 0

var qnas = [
Qna(question: "2x1=?", answer: "2", choice1: "1", choice2: "2", choice3: "3", choice4: "4"),
Qna(question: "2x2=?", answer: "4", choice1: "4", choice2: "5", choice3: "6", choice4: "7"),
Qna(question: "3x3=?", answer: "9", choice1: "7", choice2: "8", choice3: "9", choice4: "10"),
Qna(question: "4x4=?", answer: "16", choice1: "13", choice2: "14", choice3: "15", choice4: "16"),
Qna(question: "5x5=?", answer: "25", choice1: "24", choice2: "25", choice3: "26", choice4: "27"),
]

func playgame() {
if number < qnas.count{
q1question.text = qnas[number].question
q2question.text = qnas[number].question
q3question.text = qnas[number].question
q4question.text = qnas[number].question
q1answer.text = qnas[number].choice1
q2answer.text = qnas[number].choice2
q3answer.text = qnas[number].choice3
q4answer.text = qnas[number].choice4
gameround.text = "1"
rightText.text = ""
rightAddScore.text = ""
rightimage.isHidden = true

}else {
number = 0
playgame()
}
}

func rightcount(){
number += 1
playgame()
rightText.text = "答對了!"
rightText.textColor = UIColor.systemGreen
rightText.isHidden = false
score += 100
gamesocre.text = "\(score)"
gameround.text = "\(number+1)"
rightAddScore.text = "+100"
rightAddScore.textColor = UIColor.systemGreen
rightimage.image = UIImage(systemName: "arrowtriangle.up.fill")
}

func wrongcount(){
number += 1
playgame()
rightText.text = "答錯了!"
rightText.textColor = UIColor.systemRed
rightText.isHidden = false
score += 0
gamesocre.text = "\(score)"
gameround.text = "\(number+1)"
rightAddScore.text = "0"
rightAddScore.textColor = UIColor.systemRed
rightimage.image = UIImage(systemName: "arrowtriangle.down.fill")

}


@IBOutlet weak var q1question: UILabel!
@IBOutlet weak var q2question: UILabel!
@IBOutlet weak var q3question: UILabel!
@IBOutlet weak var q4question: UILabel!
@IBOutlet weak var q1answer: UILabel!
@IBOutlet weak var q2answer: UILabel!
@IBOutlet weak var q3answer: UILabel!
@IBOutlet weak var q4answer: UILabel!
@IBOutlet weak var gamesocre: UILabel!
@IBOutlet weak var gameround: UILabel!
@IBOutlet weak var rightAddScore: UILabel!
@IBOutlet weak var rightText: UILabel!
@IBOutlet weak var rightimage: UIImageView!
@IBOutlet weak var hintText: UILabel!


override func viewDidLoad() {
super.viewDidLoad()
number = 0
}

override func viewWillAppear(_ animated: Bool) {
number = 0
addscore = 0
score = 0
gamesocre.text = "0"
playgame()
}

@IBAction func answerbutton(_ sender: Any) {

//改switch
if gameround.text == "5" {
if (sender as AnyObject).tag == 1 {
if qnas[number].answer == qnas[number].choice1{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 2 {
if qnas[number].answer == qnas[number].choice2{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 3 {
if qnas[number].answer == qnas[number].choice3{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 4 {
if qnas[number].answer == qnas[number].choice4{
rightcount()
}else{
wrongcount()
}
}
if let controller = storyboard?.instantiateViewController(withIdentifier: "secondView") as? SecondViewController {
controller.finalscore = gamesocre.text
controller.modalPresentationStyle = .fullScreen //讚嘆彼得潘解救
present(controller, animated: true, completion: nil)
}
}else{
if (sender as AnyObject).tag == 1 {
if qnas[number].answer == qnas[number].choice1{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 2 {
if qnas[number].answer == qnas[number].choice2{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 3 {
if qnas[number].answer == qnas[number].choice3{
rightcount()
}else{
wrongcount()
}
}else if (sender as AnyObject).tag == 4 {
if qnas[number].answer == qnas[number].choice4{
rightcount()
}else{
wrongcount()
}
}

}




}

--

--