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

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

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

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

Swift

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

937閲覧

Xcodeでのコードのみによる画像の表示の方法

SATUKl

総合スコア2

Xcode

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

Swift

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/04/29 08:56

編集2022/01/12 10:55

Xcodeでのコードによる画像の表示

Xcodeであまりストーリーボードを使わずにコードだけで画像を表示させようとしています。
シュミレーターで画像が表示されません。
コードだけで表示させるには何が足りないのでしょうか?
また、何が問題か自分で確認する方法はありますか?

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

エラーメッセージはありません。問題は上記の通りです。

該当のソースコード

Swift

1class ViewController2: UIViewController { 2 private func func1() { 3 let UIView1: UIView = self.view 4 let image1: UIImage = UIImage(named:"cross")! 5 let imageView1 = UIImageView(image:image1) 6 let screenWidth:CGFloat = view.frame.size.width 7 let screenHeight:CGFloat = view.frame.size.height 8 let imgWidth:CGFloat = image1.size.width 9 let imgHeight:CGFloat = image1.size.height 10 let scale:CGFloat = screenWidth / imgWidth 11 let rect:CGRect = CGRect(x:0, y:0, width:imgWidth*scale, height:imgHeight*scale) 12 imageView1.frame = rect 13 imageView1.center = CGPoint(x:screenWidth/2, y:screenHeight/2) 14 self.view.addSubview(imageView1) 15 self.view.bringSubviewToFront(imageView1) 16 } 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 func1() 21 } 22}

試したこと

http://kyo-asu-aozora.seesaa.net/article/257890808.html
https://i-app-tec.com/ios/uiimageview.html
https://majintools.com/2018/10/11/uiimageview/
などを参考に十数通りのコードを試しました。

動作環境

Xcode ver 10.0

補足情報

上記のコードはこのサイトhttps://i-app-tec.com/ios/uiimageview.htmlを参考にしました。
アプリはViewController2が最初に表示されます。
Custom class はClassをViewController2にしては未指定、inherit Module From Targetにはチェックがついています。

let UIView1: UIView = self.viewの行はself.viewはUIViewなんだと一人で納得するため。
self.view.bringSubviewToFront(imageView1)の行はダメもとで最前列に持ってくるため。
あっても無くても画像が表示されませんでした。

Assets.xcassetsにcrossという名前で画像を入れています。

追記

色々試した結果、根拠は皆無ですが、プロジェクト名によるものだと思います。削除しても同じプロジェクト名だと、「Unknown class xxxxx in Interface Builder file.」と出ます。
画像の表示されない方のプロジェクトは、 Report navigatorのBuildの項目の
Build targetの最初にCreateBuildDirectory から始まるログが2つありました。

追記2(2020 5/12)

旧プロジェクトの削除が不十分なため起こったバグかと思っていましたが、どうやら違うようです。

削除の不十分さが問題とならないように、ゲストユーザーでプロジェクトを作り直しました。
その結果、プロジェクト名「パールハーバー」では画像は表示されず、プロジェクト名「ハールハーハー」では問題なく表示されました。濁点、半濁点がMoudleに表示される際、「_」に変換されるのが原因に関与していると思います。

ちなみにプロジェクト名「パールハーバー」だとMoudleには「ハ_ールハーハ_ー」ログには「パールハーバー」と表示され、強制的にMoudleを「パールハーバー」にするとログには一部、「ハ_ールハーハ_ー」と表示されます。

何故、濁点や半濁点を使うと画像表示に支障をきたすのかは不明なままです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/29 09:16

タイトル: Xcodeでのコードのみによる画像の表示 質問文: あまりストーリーボードを使わずに 何がしたいの?
SATUKl

2020/04/30 05:44

最終的には画面のランダムな位置に画像を表示させたいです。 接続がややこしいので、あまりストーリーボードを使わずに実装したいです。
SATUKl

2020/05/13 15:34

私にはそれを理解できる程の知識がありませんが、濁点・半濁点が原因なのが明確になったのでよかったです。ありがとうございます。
guest

回答1

0

質問者様のコードをコピーアンドペーストして動かしましたが、問題なく画像は表示されました。

そもそも"func1"というメソッドは呼ばれていますか?
以下のログ表示用コードを追記して、"func1"が呼ばれていることをご確認ください。
※"ViewController2"というのをご自身で作成したと思いますが、本当にControllerが呼ばれているのか気になりましたので。

Swift

1private func func1() { 2 print("Call func1") // <- 追加 3 4〜以下省略〜 5}

※補足
こちらの環境は以下です。
・Xcode11.2.1
・シミュレータ iOS13.2.2


4/30追記

"func1"が呼ばれていないのと、「Unknown class〜」というメッセージが表示されるということは、Storyboard内のCustom Classが正しく設定されていないのではないでしょうか?

アプリ起動時の画面を特に変更していなければ、"Main.storyboard"というファイルが利用されます。
"MainStoryboard"の以下画像の箇所に、「ViewController2」が正しく設定されているかご確認ください。

Main.storyboard

投稿2020/04/29 10:00

編集2020/04/30 06:39
tsuki01

総合スコア1751

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

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

SATUKl

2020/04/30 05:42

ログの存在を初めて知りました。 "Call func1"は表示されませんでした。 Unknown class _TtC15画像テスト15ViewController2 in Interface Builder file. というのが気になりましたので、自分で調べて、 https://qiita.com/eidera/items/f6fd3b1088d7bd6fe523 というサイトを見ましたが、Build PhasesにはちゃんとViewController2.swiftが存在しました。 また、代わりにUIButtonでfunc1を実行させようとすると、Appledelegate.swiftの class AppDelegate: UIResponder, UIApplicationDelegate { という行にThread 1: signal SIGABRTと出ました。 UIButtonは一発目からActionで設定しているので接続ミスはないかと思います。
tsuki01

2020/04/30 06:40

回答に追記しました。 Storyboard内の設定に誤りがある気がするので、ご確認ください。
SATUKl

2020/04/30 09:03

その部分にはしっかりとViewController2と表示されています。 Moudleにもプロジェクト名は表示されています。 inherit Module From Targetのチェックも入っています。
tsuki01

2020/04/30 09:39 編集

変更していることは無いと思いますが、以下の項目値をご確認頂けますか? 以下項目値は、"Main"になっていますでしょうか。 ・Xcodeプロジェクト内の、Info.plistファイル -> "Main storyboard file base name" -> "Main"になっていますでしょうか?
SATUKl

2020/04/30 12:19

はい。
tsuki01

2020/04/30 13:20

そうですね。。プロジェクト全体が見えないと確認が難しくなってきました。 それと表題の問題からずれてきている気もするので、新規プロジェクトに対して画像表示を再実装して確認いただけますか? 新しく"Single View App"でプロジェクト作成し、初期のViewControllerに対して処理を記載ください。画像表示が確認できたら、ViewControllerを改めて追加して確認する方針でお願いします(申し訳ありませんが。。)
SATUKl

2020/05/01 06:39

原因はわかりませんが、表示されました。
tsuki01

2020/05/01 08:12

画像表示は改善したみたいで良かったです。
SATUKl

2020/05/11 20:18

追記2の通り、正確にはMoudleとプロジェクト名が一致していませんでした。私の勘違いにより、ご迷惑をおかけいたしました。すみません。
tsuki01

2020/05/11 23:42

追記ありがとうございました。 最終的に原因が特定されたのは良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問