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

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

ただいまの
回答率

90.52%

  • Swift

    7232questions

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

  • Cocoa

    65questions

    CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

3つの画像の中からランダムに出力した後、クリックすると最初の出力画像とは異なる画像を出力したい。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 127

DynMat

score 4

3枚の画像からランダムに1枚の画像を出力(QuestionNumber = 1) → ボタンをクリック → 
QuestionNumber = 1とは異なる画像を出力(QuestionNumber = 2)→ ボタンをクリック → QuestionNumber = 1とQuestionNumber = 2とは異なる画像を出力(QuesutionNumber = 3)
これをQuestion = 14まで実行します。3枚の画像のセットが4つ、2枚の画像のセットが1つの計14枚の画像を出力するものです。最初の1セットのみのプログラムを下に示します。
下のプログラムでは1、2、3枚をそれぞれ異なる画像にすることができませんでした。

    var QuestionNumber : Int = 1
    func Rd1(QUESTION_NUMBER : Int){
        var RandomNumber1 : Double = 0
        RandomNumber1 = Double(arc4random() % 3 + 1)
        if(QUESTION_NUMBER == 1){
            if(RandomNumber1 == 1){
                self.ImageView.image = img01
            }else if(RandomNumber1 == 2){
                self.ImageView.image = img02
            }else if(RandomNumber1 == 3){
                self.ImageView.image = img03
            }

        }
        var RandomNumber2 : Double = 0
        RandomNumber2 = Double(arc4random() % 2 + 1)

        if(QUESTION_NUMBER == 2){

            if(RandomNumber1 == 1 && RandomNumber2 == 1){
                self.ImageView.image = img02
                CorrectAnswer = "1"
            }else if(RandomNumber1 == 1 && RandomNumber2 == 2){
                self.ImageView.image = img03
            }else if(RandomNumber1 == 2 && RandomNumber2 == 1){
                self.ImageView.image = img01
            }else if(RandomNumber1 == 2 && RandomNumber2 == 2){
                self.ImageView.image = img03
            }else if(RandomNumber1 == 3 && RandomNumber2 == 1){
                self.ImageView.image = img01
            }else if(RandomNumber1 == 3 && RandomNumber2 == 2){
                self.ImageView.image = img02
            }

        }

        if(QUESTION_NUMBER == 3){
            if(RandomNumber1 == 1 && RandomNumber2 == 1){
                self.ImageView.image = img03
            }else if(RandomNumber1 == 1 && RandomNumber2 == 2){
                self.ImageView.image = img02
            }else if(RandomNumber1 == 2 && RandomNumber2 == 1){
                self.ImageView.image = img03
            }else if(RandomNumber1 == 2 && RandomNumber2 == 2){
                self.ImageView.image = img01
            }else if(RandomNumber1 == 3 && RandomNumber2 == 1){
                self.ImageView.image = img02
            }else if(RandomNumber1 == 3 && RandomNumber2 == 2){
                self.ImageView.image = img01
            }

        }
    }

    func RandomQuestions(Question_Number : Int){
        if (Question_Number == 1 || Question_Number == 2 || Question_Number == 3){
            Rd1(QUESTION_NUMBER:  Question_Number)
        }
@IBAction func InputDecide(_ sender: NSButton) {

RandomQuestions(Question_Number : QuestionNumber)
QuestionNumber += 1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

以下のような考え方はいかがでしょうか?

// 画像を生成
var image1 = UIImage()
var image2 = UIImage()
var image3 = UIImage()

// 画像の配列を作成
var imageArray = [image1, image2, image3]

// ランダムな数を配列数から作成
func random(arrayCount: Int) -> Int? {
    guard arrayCount != 0 else { return nil }
    return Int(arc4random_uniform(UInt32(arrayCount)))
}

// ボタンタップ時に呼び出すメソッド
func buttonTapped() -> UIImage? {
    if let index = random(arrayCount: imageArray.count) {
        // ランダムで選んだ番号のIndexを削除して返す
        return imageArray.remove(at: index)
    }
    // 配列が空の場合
    return nil
}

// ボタン押下時にbuttonTapped()メソッドを呼び出す
let resultImage1 = buttonTapped() //=> UIImage
let resultImage2 = buttonTapped() //=> UIImage
let resultImage3 = buttonTapped() //=> UIImage
let resultImage4 = buttonTapped() //=> nil

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 21:59

    func buttonTapped() は@IBAction func button Tapped()ではないのでしょうか?

    キャンセル

  • 2018/05/11 22:10 編集

    これはあくまでも例なので自身のプロジェクトに合わせて使ってみてください。

    ```
    @IBAction func buttonTapped() {
    imageView.image = buttonTapped()
    }
    ```

    のような感じだと思います。

    キャンセル

+1

配列をランダムで並べ替えた後、前から順に取り出します。

//元の配列(文字列にしていますが、そのままUIImageを入れてもかまいません)
let array = ["img01", "img02", "img03"]
print(array)
//=> ["img01", "img02", "img03"]

//シャッフル
let shuffledArray = array.map {($0, arc4random_uniform(UInt32.max))}.sorted {$0.1 < $1.1}.map {$0.0}
print(shuffledArray)
//=> ["img02", "img01", "img03"]

//あとは前から順に取り出す
 シャッフルについて

シャッフルは別の方法でもかまいません。
例えば、今回は3枚の画像しかないので、組み合わせのテーブルを用意して、

//組み合わせテーブル
let combinationTable = [
    [0, 1, 2],
    [0, 2, 1],
    [1, 0, 2],
    [1, 2, 0],
    [2, 0, 1],
    [2, 1, 0],
]
//ランダムで組み合わせを選び、選んだ組み合わせの順に元の配列を並べ替える
let shuffledArray = combinationTable[Int(arc4random_uniform(UInt32(combinationTable.count)))].map {array[$0]}
print(shuffledArray)
//=> ["img02", "img03", "img01"]

という方法でも出来ないことはないです。

他にも方法はありますので、自分で考えたり、調べてみたりしてはどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Swift

    7232questions

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

  • Cocoa

    65questions

    CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

  • トップ
  • Cocoaに関する質問
  • 3つの画像の中からランダムに出力した後、クリックすると最初の出力画像とは異なる画像を出力したい。