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

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

ただいまの
回答率

87.79%

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

受付中

回答 1

投稿 編集

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

score 2

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

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

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

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

該当のソースコード

class ViewController2: UIViewController {
    private func func1() {
        let UIView1: UIView = self.view
        let image1: UIImage = UIImage(named:"cross")!
        let imageView1 = UIImageView(image:image1)
        let screenWidth:CGFloat = view.frame.size.width
        let screenHeight:CGFloat = view.frame.size.height
        let imgWidth:CGFloat = image1.size.width
        let imgHeight:CGFloat = image1.size.height
        let scale:CGFloat = screenWidth / imgWidth
        let rect:CGRect = CGRect(x:0, y:0, width:imgWidth*scale, height:imgHeight*scale)
        imageView1.frame = rect
        imageView1.center = CGPoint(x:screenWidth/2, y:screenHeight/2)
        self.view.addSubview(imageView1)
        self.view.bringSubviewToFront(imageView1)
    }

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

試したこと

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を「パールハーバー」にするとログには一部、「ハ_ールハーハ_ー」と表示されます。

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2020/04/29 18:16

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

    何がしたいの?

    キャンセル

  • SATUKl

    2020/04/30 14:44

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

    キャンセル

  • hoshi-takanori

    2020/05/12 06:54

    プロジェクト名や画像のファイル名などには、基本的に日本語は使わない方がいいと思います。
    特に、濁点・半濁点についてはこちらをどうぞ。
    https://qiita.com/plusadd/items/0f5ff5c470797f31a890

    キャンセル

  • SATUKl

    2020/05/14 00:34

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

    キャンセル

回答 1

0

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

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

private func func1() {
    print("Call func1") // <- 追加

〜以下省略〜
}

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


4/30追記

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

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

Main.storyboard

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/05/01 17:12

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

    キャンセル

  • 2020/05/12 05:18

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

    キャンセル

  • 2020/05/12 08:42

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

    キャンセル

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

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

関連した質問

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