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

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

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

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

Swift

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

Q&A

解決済

2回答

2352閲覧

画像ボタンと文字を紐付けながらランダム表示させたい

ka1to

総合スコア8

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/09/02 04:15

度々質問失礼します。
xcode,swift,プログラミング初学者です。

今回、「画像ボタンを押すと、その画像と別の場所に配置してあるテキストが同時に切り替わる」且つ「画像とテキストの内容が紐づいている」ものを作成したいと思っています。
(漫画でいうセリフとコマの関係のようなものです)
この時、画像とテキストを紐付けながらも、ランダムで表示させるようにしたいと思っています。

なんとなく、「画像」と「テキスト」がリンクするように数字を割り当てて、
数字をランダムで生成→その数字を画像とテキストに表示させるように指示
と思っているのですが、どのようなコードを使用したら可能になりますでしょうか。

初歩的な質問となり申し訳ないです。
ご回答いただけましたら幸いです。

swift

1現在書いているコード 2 3 var img01 :UIImage = UIImage(named:"悩む")! 4//ここで取り込んである画像に関数名をつけました。以下「img02」と11まで続いていきます。 5 6 @IBOutlet weak var serihu: UILabel! 7 @IBAction func hito(_ sender: Any) { 8 let num = arc4random(11) 9//まずここでエラーが出ています 10//「Argument passed to call that takes no arguments」 11 12 var img:[UIImage:Int] = 13 [img01:1,//省略 11まで画像:数字があります] 14 15 var serihu01:[String:Int] = 16 ["悩む・・・":1,//省略 11テキスト:数字があります] 17 18 hito.image = img[num] 19 serihu.text = serihu01[num] 20 } 21

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

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

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

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

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

guest

回答2

0

考え方はそれで合っています。
乱数の生成はやり方が少し違います。arc4random_uniformを使うほうが簡単です。

img, serihu01は単純な配列でいいです。
生成した値を配列のインデックスにすればいいので

Swift

1var img:[UIImage] = [img01, img02,] 2var serihu01:[String] = ["セリフ1", "セリフ2",] 3 4var num = arc4random_uniform(img.count) // 0~img.count-1までの乱数を生成 5 6hito.image = img[num] 7serihu.text = serihu01[num]

という感じです。

投稿2018/09/02 08:05

toki_td

総合スコア2850

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

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

ka1to

2018/09/03 03:14

ご回答ありがとうございました。 乱数生成の文字が違ったのですね。。初歩的なミスでお手数おかけいたしました。アドバイス頂いたようにコードを書き換えてみました。 もしよろしければ、再度お知恵を貸していただければ幸いです。 以下修正後のコードとなります。 ご指摘頂いた部分以外、書き換えていません。 var img:[UIImage] = [img01, img02, ~] var serihu01:[String] = ["セリフ1", "セリフ2", ~] let num = Int(arc4random_uniform(11)) //countでやると、下の二行にエラーが出てしまうため変更。   serihu.text = serihu01[num] var hito = img[num] //警告「Initialization of variable 'hito' was never used; consider replacing with assignment to '_' or removing it Replace 'var hito' with '_'」が表示されます。 //hito.image = img[num]の場合、エラー「Value of type (Any) -> ()' has no member 'image'」 このように変更しました。 シュミレーターを動かしてみましたが、該当の画像ボタンをタップしてもテキストが変更されるだけで、画像が変更されない状況です。 hito.image = img[num]の方がなんとなくしっくりくるのですが、エラーを治す手段がわかりませんでした。 折り返しの質問となりますが、ご回答頂けますとありがたいです。 よろしくお願いします。
guest

0

自己解決

すみません、試行錯誤の末自己解決致しました!
解決の糸口を与えてくださってありがとうございました!
まだ意味がはっきりしない文章があるのでこれであっているかわからないのですが、追記、修正したコードを載せておきます。
初心者さんのご参考になれば・・

var imgArray:[UIImage] = []
//追記

@IBOutlet weak var hitoimg: UIImageView!

//追記。画像ボタンの上に新たにイメージビューを配置し、名前をつけました。

override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }

//override部分全部追記

@IBAction func hito(_ sender: Any) { imgArray = [img01, 〜 img11] var serihu01:[String] = ["セリフ1", 〜 "セリフ11" ] let num = Int(arc4random_uniform(11)) serihu.text = serihu01[num] hitoimg.image = imgArray[num] }

ご回答いただきありがとうございました!お世話になりました
また何かありましたら回答くださると幸いです

投稿2018/09/03 16:42

編集2018/09/03 16:44
ka1to

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問