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

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

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

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

Q&A

受付中

画像をシャッフルして表示したら、同じ画像が出てきてしまいます。

ip33845586
ip33845586

総合スコア1

Swift

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

1回答

0グッド

0クリップ

305閲覧

投稿2022/11/23 04:17

編集2022/11/23 04:21

前提

ここに質問の内容を詳しく書いてください。
swiftで画像をボタンを押すと、ランダムに表示させるアプリを作ろうと思っています。
画像の配列を.shuffledでシャッフルするとなぜか同じ画像が出てきてしまいます。
さらに画像の欄がたまに空白になってしまいます。
もしよろしければよろしくお願いします。

実現したいこと

画像を重複なくランダムに表示する。

発生している問題・エラーメッセージ

画像の重複と、空白

該当のソースコード

swift
ソースコード
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView! @IBAction func action(_ sender: Any) { dispImageNo += 1 if dispImageNo < 5{ displayImage() }else if dispImageNo > 5{ performSegue(withIdentifier: "toranpu", sender: nil) } } var dispImageNo = 0 func displayImage(){ let imageNameArray = [ "image01", "image02", "image03", "image04", "image05" ] let testtest = imageNameArray.shuffled() let name = testtest[dispImageNo] let image = UIImage(named: name) imageView.image = image} override func viewDidLoad() { super.viewDidLoad() let image = UIImage(named: "image01") imageView.image = image

試したこと

removeについて調べましたが、有意な情報が見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

初心者ですが、よろしくお願いします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2022/11/23 12:10

表示のたびに配列をシャッフルしたら、かぶるでしょうね…。
ip33845586

2022/11/23 20:06

回答ありがとうございます!表示のたびということは、どこをシャッフルすれば値が被らないのでしょうか?もしよろしければ教えていただきたいです。

回答1

0

次の内容でどうでしょうか?
申し訳ありませんが、動作確認はしておりません。

また、UIImage(named: name) は
メモリリークの可能性があるため
UIImage(contentsOfFile: imagePath) の使用を検討しても良いかもしれません。

Swift

1//A → B → A の順番を許容するパターン 2 3@IBOutlet weak var imageView: UIImageView! 4 5@IBAction func action(_ sender: Any) { 6 7 var targetNum = Int.random(in: 0..<5) 8 while(targetNum == dispImageNo){ 9 var targetNum = Int.random(in: 0..<5) 10 } 11 12 dispImageNo = targetNum 13 displayImage() 14} 15 16 17 var dispImageNo = 0 18 19func displayImage(){ 20 21 let imageNameArray = [ 22 "image01", 23 "image02", 24 "image03", 25 "image04", 26 "image05" 27 ] 28 29 //let testtest = imageNameArray.shuffled() //コメントアウト 30 //let name = testtest[dispImageNo] //コメントアウト 31 let name = imageNameArray[dispImageNo] //追加 32 let image = UIImage(named: name) //追加 33 imageView.image = image 34} 35 36override func viewDidLoad() { 37 super.viewDidLoad() 38 //let image = UIImage(named: "image01") //コメントアウト 39 //imageView.image = image //コメントアウト 40 41 let imageNameArray = [ 42 "image01", 43 "image02", 44 "image03", 45 "image04", 46 "image05" 47 ] //追加 48 var dispImageNo = Int.random(in: 0..<5) //追加 49 let name = imageNameArray[dispImageNo] //追加 50 let image = UIImage(named: name) //追加 51 imageView.image = image //追加 52}

Swift

1//A → B → A の順番を許容しないパターン 2 3@IBOutlet weak var imageView: UIImageView! 4 5@IBAction func action(_ sender: Any) { 6 7 dispImageNo += 1 8 if dispImageNo < 5{ 9 displayImage() 10 }else if dispImageNo >= 5{ // 5の時変化しなくなるため、大なりイコールに修正 11 performSegue(withIdentifier: "toranpu", sender: nil) 12 } 13} 14 15 16 var dispImageNo = 0 17 var testtest: [String] = [] 18 19func displayImage(){ 20 21 /* コメントアウト 22 let imageNameArray = [ 23 "image01", 24 "image02", 25 "image03", 26 "image04", 27 "image05" 28 ] 29 */ 30 31 //let testtest = imageNameArray.shuffled() //コメントアウト 32 let name = testtest[dispImageNo] 33 let image = UIImage(named: name) 34 imageView.image = image 35} 36 37override func viewDidLoad() { 38 super.viewDidLoad() 39 //let image = UIImage(named: "image01") //コメントアウト 40 //imageView.image = image //コメントアウト 41 42 let imageNameArray = [ 43 "image01", 44 "image02", 45 "image03", 46 "image04", 47 "image05" 48 ] //追加 49 50 testtest = imageNameArray.shuffled() //追加 51 let name = testtest[dispImageNo] //追加 52 let image = UIImage(named: name) //追加 53 imageView.image = image //追加 54}

投稿2022/11/24 04:50

uni2

総合スコア177

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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