実現したいこと
SwiftでStoriyBoardを使わずに神経衰弱のようなアプリを作成しています。
発生している問題
UIImageを25個Viewに表示させ、それぞれにタグを設定しました。
gestureTapメソッドというのを作り、UIImageをタップしたときに1回目タップした時のタグを変数num01に代入し,
num01と2回目にタップしたUIImageViewのタグの合計が25になったときに、カードが揃った時の判定にしようと思っているんですが、
最後にタップしたUIImageしか処理することができません。
1回目にタップしたUIImageViewを識別して処理する方法がわかりません。
かいつまんで、無理やり書くと下のような処理がしたいです。
swift
1var vw: UIImageView! // UIImageViewインスタンス生成 2num01 = 1 // 3vw.tag = num01 // タグを取得 4vw.num01(tagのこと).image = nil // 取得したタグで判別してimageをnilにする
なにか、良い方法があればご教授願います。
該当のソースコード
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 // UIImageViewインスタンス作成 6 var vw: UIImageView! 7 // カード1枚目のタグを保持 8 var num01 = 0 9 // 1枚目の選択: true 2枚目: false 10 var flg = true 11 // タグを配列に格納 12 var tgArray: [Int] = [] 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 makeImage() 18 } 19 20 21 // カードの生成 22 func makeImage() { 23 24 let length = 65 25 var tg: Int = 1 26 27 // カードを25枚生成 28 for y in 0...4 { 29 30 let ay = 150 + (length * y) 31 32 for x in 0...4 { 33 34 let ax = 38 + (70 * x) 35 36 // イメージビューの設定 37 vw = UIImageView(frame: CGRect(x: ax, y: ay, width: length, height: length)) 38 vw.image = UIImage(named: "mum01_shadow") 39 vw.tag = tg 40 tgArray.append(tg) 41 tg += 1 42 view.addSubview(vw) 43// print(tg, vw.tag, tgArray) 44 45 // タップジェスチャーの設定 46 vw.isUserInteractionEnabled = true 47 48 let ges = UITapGestureRecognizer( 49 target: self, 50 action: #selector(gestureTap(sender:))) 51 vw.addGestureRecognizer(ges) 52 53 } 54 55 } 56 } 57 58 59 // カードをタップした時の処理 60 @objc func gestureTap(sender: UITapGestureRecognizer) { 61 // vwでnilをreturnしつつUIImageViewを取り出している 62 guard let vw = sender.view as? UIImageView else { return } 63 64 // 1枚目の選択 65 if flg { 66 num01 = vw.tag 67 vw.image = UIImage(named: "mum01") 68 flg = false 69 } else { 70 // 2枚目の選択 71 print("なむ(num01), たぐ(vw.tag)", num01 + vw.tag) 72 73 if num01 + vw.tag == 25 { 74 // カードが揃った時の処理 75 vw.image = UIImage(named: "mum01") 76 77 /*------------------------------------------ 78 ここで1枚目に選択したUIImageViewをnilにしたい! 79 ------------------------------------------ */ 80 81 vw.image = nil 82 flg = true 83 } else { 84 // カードが揃わなかった時の処理 85 vw.image = UIImage(named: "mum01_shadow") 86 flg = true 87 } 88 } 89 print(vw.tag) 90 } 91 92}
この質問に回答して直すよりcollection viewつかって書き直したほうが今後のためになると思います。。。
参考:
https://qiita.com/Queue0412/items/0984c8d1a757935f140f
回答ありがとうございます。
Collection Viewというものがどういうものなのか知らないので、まず参考記事読んでみます。
確かにcollectionViewにしたら、やろうとしていることもっと楽に実現できますよ。
回答ありがとうございます!
プログラミング学習中で、どういう風に動いているかを確認しながら作りたいと思っていまして。
そんなに便利な部品なんですねcollectionView。
ひと段落着いたら触ってみようと思います。
回答1件
あなたの回答
tips
プレビュー