前提・実現したいこと
1-7個あるimageを二個のボタンどちらを最初に押すかによってimageの切り替えの増え方を変えたいです。
例
最初にleftButtonを押した場合、
それからの処理はleftを押すとimageが1.3.5.7と変わり、rightを押すとimageは1-7のように始めにどちらのボタンを押すかにとって、それからの処理の条件を変化させたいです。
最初にrightuttonを押した時はそれからの処理はleftを押すとimageが1-7と変わり、rightを押すとimageは1.3.5.7です。
そして、ansewerNumberが設定してない8になったら画面遷移をしたいです。
発生している問題・エラーメッセージ
1 こちらのコードだと交互にボタンを押した場合、どちらも1-7となってしまいます。
2 また7枚目まで行くと8枚目まで行かず画面遷移されずにそれで終わってしまいます。
該当のソースコード
import UIKit class ViewController: UIViewController { //どちらのボタンを押すかで回数を確定させる var answerNumber = 0 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var Label: UILabel! enum actionTag : Int { case action1 = 1 case action2 = 2 } @IBAction func left(_ sender: Any) { //条件分岐 if let button = sender as? UIButton { if let tag = actionTag(rawValue: button.tag) { switch tag { case .action1: answerNumber = answerNumber * 2 case .action2: answerNumber = answerNumber + 1 default: break } } } //imageの画像を変換させたい //0枚目 if answerNumber == 0 { Label.text = "hazime" imageView.image = UIImage(named:"0") } else if answerNumber == 1 { //1枚目 Label.text = "itibann" imageView.image = UIImage(named:"1") } else if answerNumber == 2 { //2枚目 Label.text = "nibann" imageView.image = UIImage(named:"2") } else if answerNumber == 3 { //3枚目 Label.text = "sannban" imageView.image = UIImage(named:"3") } else if answerNumber == 4 { //4枚目 Label.text = "yonban" imageView.image = UIImage(named:"4") }else if answerNumber == 5 { //5枚目 Label.text = "goban" imageView.image = UIImage(named:"5") } else if answerNumber == 6 { //6枚目 Label.text = "rokuban" imageView.image = UIImage(named:"6") } else if answerNumber == 7 { //7枚目 Label.text = "nanaban" imageView.image = UIImage(named:"7") } answerNumber = answerNumber + 1 ///imageが8に達したら画面遷移 if answerNumber == 8 { answerNumber = 0 performSegue(withIdentifier: "next", sender: nil) } } @IBAction func right(_ sender: Any) { if let button = sender as? UIButton { if let tag = actionTag(rawValue: button.tag) { switch tag { case .action1: answerNumber = answerNumber + 1 case .action2: answerNumber = answerNumber * 2 default: break } } } //imageの画像を変換させたい //0枚目 if answerNumber == 0 { Label.text = "hazime" imageView.image = UIImage(named:"0") } else if answerNumber == 1 { //1枚目 Label.text = "itiban" imageView.image = UIImage(named:"1") } else if answerNumber == 2 { //2枚目 Label.text = "niban" imageView.image = UIImage(named:"2") } else if answerNumber == 3 { //3枚目 Label.text = "sanban" imageView.image = UIImage(named:"3") } else if answerNumber == 4 { //4枚目 Label.text = "yonban" imageView.image = UIImage(named:"4") }else if answerNumber == 5 { //5枚目 Label.text = "goban" imageView.image = UIImage(named:"5") } else if answerNumber == 6 { //6枚目 Label.text = "rokuban" imageView.image = UIImage(named:"6") } else if answerNumber == 7 { //7枚目 Label.text = "nanaban" imageView.image = UIImage(named:"7") } answerNumber = answerNumber + 1 ///imageが8に達したら画面遷移 if answerNumber == 8 { answerNumber = 0 performSegue(withIdentifier: "next", sender: nil) } } }
試したこと
switch文の使い方がまだ上手く分かっていないので、サイトから見様見真似で
if let button = sender as? UIButton {
if let tag = actionTag(rawValue: button.tag) {
switch tag { case .action1: answerNumber = answerNumber + 1 case .action2: answerNumber = answerNumber * 2 default: break } } }
のところを追加しました、こちらを追加する前の処理では、一枚ずつ増えて8で画面遷移がちゃんと行われました。
補足情報(FW/ツールのバージョンなど)
Swift5
xcode 11.3.1
回答1件
あなたの回答
tips
プレビュー