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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

994閲覧

タップした場所に画像を表示する方法を教えて下さい。

magiee

総合スコア28

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/04/06 14:13

前提・実現したいこと

タップした場所に画像を表示させたいです。

ご教授のほど、よろしくお願い致します。

以下のリンクを参考にしたのですが、情報が古くうまくいきませんでした。
https://qiita.com/39_isao/items/42ed67a6183d1fd2924c

該当のソースコード

import UIKit class ViewController: UIViewController { @IBAction func addImage(_ sender: UITapGestureRecognizer) { let coin = UIImage(named: "myImage") coin.center = sender.location(in: self.view) self.view.addSubview("myImage") } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } }

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

coin.center = sender.location(in: self.view) の所でエラーが発生。
エラー内容 Value of type 'UIImage?' has no member 'center'

self.view.addSubview("myImage")のところでエラーが発生。
エラー内容 Cannot convert value of type 'String' to expected argument type 'UIView'

使用している言語

swift
Xvode 11.4

ご教授のほど、よろしくお願い致します。

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

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

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

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

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

TsukubaDepot

2020/04/06 14:34

Qiitaで参考にされた記事を見た上に、私の環境(Xcode11/11E146)で動かしてみましたが、下記の一行を書き換える程度で動きました(この行もXcodeが変更を促したものです)。 mogura.center = sender.location(in: self.view) オリジナルのコードと比較すると随分と違いがありますが、まずはよく見直してみてはいかがでしょうか。
guest

回答1

0

ベストアンサー

コードそのものはQiitaの記事とよく比較すれば動くと思うので、参考までにエラーについて説明しておきます。

coin.center = sender.location(in: self.view) の所でエラーが発生。
エラー内容 Value of type 'UIImage?' has no member 'center'

UIImage型の変数(インスタンス)にはcenterという名前のメンバ変数(プロパティ)がありません、という意味です。

Xcode は自動補完してくれますので、coin.cと途中まで打ち込めば、coinの型を自動的に推論した上、適切にプロパティの候補を表示します。

候補にcenterという表示がでてこない場合、それまでの処理のどこかが間違っている可能性が高いので、coinという名前のインスタンスに関連した処理を見直せば間違いが発見できる可能性が極めて高いです。

self.view.addSubview("myImage")のところでエラーが発生。
エラー内容 Cannot convert value of type 'String' to expected argument type 'UIView'

addSubView()という関数(メソッド)の引数(カッコ内で渡す変数)の型はUIViewと定義されているものの、渡されている変数の型はString型です。String型は、引数として期待されているUIView型に変換することはできません、という意味です。

Swiftは、極めて一部の例外を除くと型変換を自動では行いません。このようなエラーが出た場合も、それまでの処理に間違いがあるか、そもそもメソッドの使いかたが誤っている可能性があります。

投稿2020/04/06 14:43

編集2020/04/06 14:45
TsukubaDepot

総合スコア5086

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

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

magiee

2020/04/07 00:32

ありがとうございます。 問題なく、動かすことができました! もう一つ質問なのですが、1回目のタップで表示させた画像を、 2回目のタップで表示させた画像を消したい場合は、どのように 記載させれば動くでしょうか? 以下のコードでは、うまくいきませんでした。 何度も、質問してしまい申し訳ございません。 ```ここに言語名を入力 import UIKit class ViewController: UIViewController { var coinCount = 0 @IBAction func addImage(_ sender: UITapGestureRecognizer) { if coinCount == 0 { let coin = UIImageView(image: UIImage(named: "myImage")) coin.center = sender.location(in: self.view) self.view.addSubview(coin) } else if coinCount == 1 { let coin = UIImageView(image: UIImage(named: "myImage")) coin.image = nil coin.setNeedsDisplay() coin.layoutIfNeeded() } coinCount = coinCount + 1 coinCount = coinCount % 3 } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } ``` ご教授のほどよろしくお願いします。
TsukubaDepot

2020/04/07 02:33

追記された質問は新しい質問になりますので、改めて投稿していただけないでしょうか。 ここに追記されても目に触れないため、より適切な回答がつく機会を失ってしまいます。
magiee

2020/04/07 02:50

かしこまりました。 ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問