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

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

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

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

Q&A

解決済

1回答

2451閲覧

swift3で条件分岐でUIImageViewの表示を変えたい

nemunemu

総合スコア11

Swift

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

0グッド

0クリップ

投稿2017/02/18 09:57

swift3 Xcode8.2.1でswitch文で画像を表示を入れ替えるシステムを作っています。
画像を入れ替える機能を実装中に以下のエラーメッセージが発生しました。

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

Constant 'testImage' used before being initalized ```s ###該当のソースコード ```swift3 import Foundation import UIKit class ViewController: UIViewController{ func initImageView(fig: String) -> UIImageView{ // UIImage インスタンスの生成 let image1:UIImage = UIImage(named:fig)! // UIImageView 初期化 let imageView = UIImageView(image:image1) // 画面の横幅を取得 let screenWidth:CGFloat = view.frame.size.width let screenHeight:CGFloat = view.frame.size.height // 画像の中心を画面の中心に設定 imageView.center = CGPoint(x:screenWidth/2, y:(screenHeight - screenHeight/4)) // UIImageViewのインスタンスをビューに追加 self.view.addSubview(imageView) return (imageView) } func deleteImageView(hoge: UIImageView){ // UIImageViewのインスタンスをビューから削除 hoge.removeFromSuperview() } // 画面表示するタイミングでリロードが入る override func viewWillAppear(_ animated: Bool) { let testImage: UIImageView switch point { case 10: print(point) testImage = initImageView(fig: "test1.png") break case 20: // エラー出る所 deleteImageView(hoge: testImage) testImage = initImageView(fig: "test2.png") default: print("その他") } } }

変数を用意してあげれば, 画像の入れ替えがうまくいくと思ったのですが画像は2枚表示され削除されませんでした.
そのため, 画像のUIImageViewのインスタンスを削除しようとしたのですが, エラーが起きてしまいどうすることもできなくなってしまいました.
エラーをみると, UIImageVIewのインスタンスの初期化がされていないということなのかと思ったですが, ここで初期化してしまうと前の画像が削除できない気がしました. このエラーを解決する方法か, 違う実装方法しかないのかが知りたいです.

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

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

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

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

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

guest

回答1

0

ベストアンサー

UIImageViewをインスタンス変数として保持して、設定する画像をswitchで分けるだけでできます。
ちなみに質問のコードだとUIImageViewのサイズ(縦、横)が設定されていませんよ。

swift

1import UIKit 2 3class ViewController: UIViewController{ 4 5 let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 // 画面の横幅を取得 11 let screenWidth:CGFloat = view.frame.size.width 12 let screenHeight:CGFloat = view.frame.size.height 13 14 // 画像の中心を画面の中心に設定 15 imageView.center = CGPoint(x:screenWidth/2, y:(screenHeight - screenHeight/4)) 16 17 // UIImageViewのインスタンスをビューに追加 18 view.addSubview(imageView) 19 } 20 21 override func viewWillAppear(_ animated: Bool) { 22 super.viewWillAppear(animated) 23 24 switch point { 25 case 10: imageView.image = UIImage(named: "test1.png") 26 case 20: imageView.image = UIImage(named: "test2.png") 27 default: print("その他") 28 } 29 } 30}

投稿2017/02/18 10:47

_Kentarou

総合スコア8490

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

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

nemunemu

2017/02/18 12:06

できました!ありがとうございました! swiftを初めてだったので勉強になります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問