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

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

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

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

Q&A

解決済

1回答

639閲覧

複数のCollectionViewを交互にreloadする方法

tsuji71

総合スコア17

Swift

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

0グッド

0クリップ

投稿2020/05/10 03:23

作りたいもの
簡単なカードゲームを作ろうとしているのですが、その一環で、山札から交互にカードを引いていくような機能を作ろうとしています

実装の方針
1 山札の配列(numArray)を用意
2 味方の手札用の配列(myNumArray)と敵手札用の配列(enemyNumArray)を用意
3 ViewDidLoadメソッドで、numArrayをシャッフル
4 myButtonが押されるたびに、numArrayの文字を一つずつmyNumArrayとenemyNumArrayに交互に振り分ける そしてcollectionViewを更新する

なお、collectionViewは手札を表現するために用いており、myCollectionViewとenemyCollectionViewがあります
この二つのcollectionViewはif文で引数を条件分岐させることによって区別させています

問題点
理想としては、myButtonが押されるたびに交互にcollectionViewのcellの数(つまり表示される手札の数)が一枚ずつ増えるようにしたいのですが、現状では味方と敵の配列が1枚ずつ増えてから、同時に更新されるようになってしまっています(cellの数が増えないだけで、collectionViewに表示される数には変化が反映されているのでreload自体は行われている気がします)
これをどう修正すればいいのでしょうか?

swift

1import UIKit 2 3class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout { 4 5 6 //  CollectionViewの接続 7 @IBOutlet weak var myCollectionView: UICollectionView! 8 @IBOutlet weak var enemyCollectionView: UICollectionView! 9 10 11 // 山札の配列 12 var numArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] 13 // 味方札の配列 14 var myNumArray:[Int] = [] 15 // 敵札の配列 16 var enemyNumArray:[Int] = [] 17 // ターンのカウント 18 var turnCount = 0 19 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 // 山札をシャッフル 25 numArray.shuffle() 26 27 print(numArray) 28 29 // CollectionViewのdelegate 30 myCollectionView.delegate = self 31 myCollectionView.dataSource = self 32 enemyCollectionView.delegate = self 33 enemyCollectionView.dataSource = self 34 35 // CollectionViewのレイアウト 36 let layout = UICollectionViewFlowLayout() 37 layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) 38 layout.minimumInteritemSpacing = 1 39 layout.minimumLineSpacing = 1 40 myCollectionView.collectionViewLayout = layout 41 enemyCollectionView.collectionViewLayout = layout 42 43 print("pointA") 44 } 45 46 // 中央ボタン 47 @IBAction func myButton(_ sender: Any) { 48 49 print("pointB") 50 51 createNumArray() 52 myCollectionView.reloadData() 53 enemyCollectionView.reloadData() 54 55 56 } 57 58 59 // それぞれの配列を作る 60 func createNumArray() { 61 62 let thisNum = numArray.first 63 numArray.remove(at: 0) 64 65 if turnCount == 0 { 66 myNumArray.append(thisNum!) 67 myNumArray.sort() 68 turnCount = 1 69 print("pointC(myNumArray)") 70 } else { 71 enemyNumArray.append(thisNum!) 72 enemyNumArray.sort() 73 turnCount = 0 74 print("pointD(enemyNumArray)") 75 } 76 77 } 78 79 80 // ここからCollectionViewのメソッド 81 82 83 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 84 85 if collectionView == myCollectionView { 86 return myNumArray.count 87 } else if collectionView == enemyCollectionView { 88 return enemyNumArray.count 89 } else { 90 return 0 91 } 92 } 93 94 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 95 96 if collectionView == self.myCollectionView { 97 let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) 98 cell.backgroundColor = UIColor(red: 0, green: 0.5, blue: 0, alpha: 0.2) 99 100 101 let cellsetNum:String = "(myNumArray[indexPath.row])" 102 103 let label = cell.contentView.viewWithTag(1) as! UILabel 104 label.text = cellsetNum 105 106 107 108 return cell 109 110 } else { 111 let cell = enemyCollectionView.dequeueReusableCell(withReuseIdentifier: "NCell", for: indexPath) 112 cell.backgroundColor = UIColor(red: 1, green: 0.5, blue: 0, alpha: 1) 113 114 let cellsetNum:String = "(enemyNumArray[indexPath.row])" 115 let label = cell.contentView.viewWithTag(1) as! UILabel 116 label.text = cellsetNum 117 return cell 118 119 } 120 121 } 122 123 124 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 125 126 } 127 128 // セルのレイアウトを設定 129 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 130 131 let widthcellSize : CGFloat = 64 132 let heightcellSize : CGFloat = 120 133 return CGSize(width: widthcellSize, height: heightcellSize) 134 } 135 136 137} 138 139

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

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

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

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

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

guest

回答1

0

ベストアンサー

myCollectionView と enemyCollectionView で layout を分ける必要があります。

swift

1 // CollectionViewのレイアウト 2 let myLayout = UICollectionViewFlowLayout() 3 myLayout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) 4 myLayout.minimumInteritemSpacing = 1 5 myLayout.minimumLineSpacing = 1 6 myCollectionView.collectionViewLayout = myLayout 7 8 let enemyLayout = UICollectionViewFlowLayout() 9 enemyLayout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) 10 enemyLayout.minimumInteritemSpacing = 1 11 enemyLayout.minimumLineSpacing = 1 12 enemyCollectionView.collectionViewLayout = enemyLayout

投稿2020/05/10 03:58

hoshi-takanori

総合スコア7895

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

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

tsuji71

2020/05/10 05:36

なるほど、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問