MacOS Catalina 10.15.4
Xcode 11.5 beta
Swift version 4
簡単なスロットアプリを作っています。
1秒毎にスロットが回って7つある画像を順番に表示し、ストップボタンを押せば止まるような仕組みを想定しています。
以下のようにcheckをBool値で設定し、trueの間は回り続け、ストップボタンを押せばflaseに変わって止まるようにしたいです。
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var image1: UIImageView! 6 var check1 = true 7 var picarray:[UIImage] = [] 8 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 // UIImage インスタンスの生成 14 let pic1:UIImage = UIImage(named:"pic1")! 15 let pic2:UIImage = UIImage(named:"pic2")! 16 let pic3:UIImage = UIImage(named:"pic3")! 17 let pic4:UIImage = UIImage(named:"pic4")! 18 let pic5:UIImage = UIImage(named:"pic5")! 19 let pic6:UIImage = UIImage(named:"pic6")! 20 let pic7:UIImage = UIImage(named:"pic7")! 21 22 picarray = [pic1, pic2, pic3, pic4, pic5, pic6, pic7] 23 24 25 // UIImageView 初期化 26 image1.image = pic1 27 28 move(image: image1, check: check1) 29} 30 31 func move(image: UIImageView, check: Bool){ 32 if check == true{ 33 if n >= 7{ n = 0 } 34 image.image = picarray[n] 35 n += 1 36 37 DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 38 39 self.move(image: image, check: check) 40 } 41 } 42 } 43 44 @IBAction func stop1(_ sender: Any) { 45 check1 = false 46 }
ただ、ボタンを押してcheck1 = false
にしても次の1秒には```true
この記述だと```move()```に渡した```check1```は```true```のまま値は変わらないのでしょうか。 (試しに```func move()```中のcheckを引数ではなく```check1```に変えると、ボタンを押せばスロットが期待通り止まります。) ストップボタンは他にも複数あり、できたら汎用性の高い一つの```func```で表したいです。 初心者でコードが汚く恐縮ですが、記述の仕方に誤りなどありましたらご教示頂けると幸いです。 お手数ですが、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/30 03:50