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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

772閲覧

Swift cell Label

Anoa

総合スコア10

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/09/07 06:06

編集2020/09/07 06:23

Swift

1 2 3 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 4 if indexPath.row == redCellIndex && OnGame{ 5 print("赤いセル") 6 point = point+1 7 timerLabel.text="Finish" 8 point = point+0 9// pointLabel.text="GameOver" 10 pointLabel.text = String(point) 11 timerLabel.text="0" 12// pointLabel.invalidate() 13// pointLabel.text="0" 14 15 } else { 16 print("黒いセル") 17 pointLabel.text = "GameOver" 18 timer.invalidate() 19 timerLabel.text = "0" 20 OnGame = false 21// pointLabel.text="0" 22 } 23 24 } 25 26 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 27 return 12 28 } 29 30 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 31 let horizontalSpace : CGFloat = 0.2 32 let cellSize : CGFloat = self.view.bounds.width / 4 - horizontalSpace 33 return CGSize(width: cellSize, height: cellSize) 34 } 35 36 @objc func down(){ 37 if Int((count - count.rounded()) * 100) == 0 { 38 changeColor() 39 } 40 if count>=0{ 41 count = count - 0.01 42 timerLabel.text = String(format: "%.2f",count) 43 }else{ 44 if timer.isValid{ 45 timer.invalidate() 46 timerLabel.text = "Finish" 47 // point = point+0 48 } 49 } 50 } 51} 52 53 54```ここまでは此処で教えていただき理解で理解できたのですが、 55黒いセルを押してしまった場合はタイマーを破棄し、タイマーは0になるようになっています。しかし黒いセルを押した後にスコアを本当は残してスコアLabelに表示したいのですが、わからなかったので今はとりあえずGameoverにしてあります。 56どうやったら赤いセルをおし押して加算された分のスコアを反映できますか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

赤いセルを押したときの処理から、実質必要なところだけ抜き出すとこのような感じです。

Swift

1 if indexPath.row == redCellIndex && OnGame{ 2 print("赤いセル") 3 point = point+1 4 pointLabel.text = String(point) 5 }

point という変数が、これまで蓄積した得点になるわけです。
これは、質問者であるAnoaさんが書かれたコードなのでご理解いただけると思います。

また、それまでの得点を pointLabel.text に表示するコードも書かれていますから、それもご理解いただけると思います。

そうであれば、黒いラベルを押したときの処理

Swift

1 else { 2 print("黒いセル") 3 pointLabel.text = "GameOver" 4 timer.invalidate() 5 timerLabel.text = "0" 6 OnGame = false 7 }

にはどのように記述すれば良いのか、自ずからご理解いただけるかと思います。

ただし、pointLabel"GameOver"と表示してしまうと、得点表示が行えないため、別のラベルに表示する工夫が必要です。

たとえば、timerLabelに表示するという方法もあるかと思いますが、それは開発者である質問者さんが決めることなので、いい方法を考えてみてください。

ちなみに、ラベルに得点を表示できる処理は、両方のパターン(赤いセルを押したとき、黒いセルを押したとき)で共通なので、if文の外に出すことも可能です。

たとえば、このような感じです。

Swift

1 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 2 if indexPath.row == redCellIndex && OnGame{ 3 print("赤いセル") 4 point = point+1 5 } else { 6 print("黒いセル") 7 timer.invalidate() 8 timerLabel.text = "GameOver" 9 OnGame = false 10 } 11 // これまでの得点を表示 12 pointLabel.text = String(point) 13 }

投稿2020/09/07 07:46

TsukubaDepot

総合スコア5086

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

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

Anoa

2020/09/08 01:36

なるほど… とてもわかりやすく説明していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問