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

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

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

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

Q&A

1回答

1549閲覧

UIImageViewに赤い円を表示させたい

blacknill

総合スコア1

Swift

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

0グッド

0クリップ

投稿2021/10/13 11:11

画面をタッチした時の動作について勉強しています。
(Xcode version13.0)

UIImageViewを配置しそのView内をタッチした時に赤い円を表示させたいです。
UIImageViewにtap gesture recognizerを配置することによってView内のタップ認識ができることはネットの検索により知りました。

しかし,どのようにコードを書くと「タッチ時に赤い円を表示する」のかが分かっておりません。

赤い円のサイズ等に関しては後々変更したいと考えておりますが,まずはどのようにコードを書くと赤い円の表示する方法を知りたいと思い,質問を投稿させていただきました。

不明瞭な点も幾つもあるとは思いますが,
よろしければご教授頂けますと幸いでございます。

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

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

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

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

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

hoshi-takanori

2021/10/13 15:54

画像の上に赤い円を表示したいってことだと思いますが、その先どうしたいのかによってやり方はいくつか考えられます。 とりあえずお絵描きアプリの開発方法について学ぶと良いのでは…。
退会済みユーザー

退会済みユーザー

2021/10/17 07:13

回答を放置されたままですが質問と意図と異なるものでしたか?その場合は知りたい内容とどう違うのかコメント等にご記載ください
blacknill

2021/10/17 14:30

返信が遅くなりました。 少々都合に負われておりましてご意見/ご回答の確認ができておりませんでした。 >hoshi-takanoriさん ご意見ありがとうございます。 お絵描きアプリについて調べてみようと思います。 >ycv57u6yさん 回答ありがとうございます。 まだまだ未熟者でございまして「サブクラスの作り方?」という状況でございます。 サブクラスの作り方を勉強し(難航しておりますが...),ご回答いただきました方法で確認できましたら 評価(ベストアンサー/高評価)を押させていただきたく存じます。
guest

回答1

0

描画用のカスタムビューを用意する

任意の図形を描画するには UIView のサブクラスを作り、draw(_:) メソッドをオーバーライドします。描画のパスは UIBezierPath で作成し、色は UIColor で指定します。弧を作成するメソッドを利用して円を作成できます。

例: RedCircleView

swift

1import UIKit 2 3class RedCircleView: UIView { 4 override init(frame: CGRect) { 5 super.init(frame: frame) 6 prepare() 7 } 8 9 required init?(coder: NSCoder) { 10 super.init(coder: coder) 11 prepare() 12 } 13 14 func prepare() { 15 // 背景色を透明にして他のビューの子にしたとき背景色で塗りつぶさないようにする 16 self.backgroundColor = .clear 17 18 // お好みで………… 19 self.autoresizingMask = [.flexibleWidth, .flexibleHeight] 20 } 21 22 override func draw(_ rect: CGRect) { 23 super.draw(rect) 24 25 // 中心座標と短辺を計算しておく 26 let center = CGPoint(x: rect.size.width / 2.0, y: rect.size.height / 2.0) 27 let shortSide = min(rect.size.width, rect.size.height) 28 29 // 円のパスを作成 30 let lineWidth = CGFloat(8.0) 31 let redCircle = UIBezierPath( 32 arcCenter: center, // 弧の中心座標 33 radius: shortSide / 2 - lineWidth, // 半径 34 startAngle: 0, // 弧の描画開始角度 35 endAngle: CGFloat(Double.pi) * 2, // 弧の描画終了角度 36 clockwise: true // 時計回りに描画するか 37 ) 38 39 // 線の色と太さをセットして描画 40 UIColor(red: 1, green: 0, blue: 0, alpha: 1).setStroke() 41 redCircle.lineWidth = lineWidth 42 redCircle.stroke() 43 } 44}

タップジェスチャーのアクションでイメージビューに貼り付ける

イメージビューと同じ大きさのカスタムビューを生成して貼り付ければイメージビューの中に赤い丸を描画できます。

swift

1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet weak var imageView: UIImageView! 5 6 @IBAction func didTapImageView(_ sender: Any) { 7 if (self.imageView.viewWithTag(1) == nil) { 8 let redCircleView = RedCircleView(frame: self.imageView.bounds) 9 redCircleView.tag = 1 10 self.imageView.addSubview(redCircleView) 11 } else { 12 print("Already added a red circle view.") 13 } 14 } 15}

なお、さらに色々な図形を頻繁に追加・削除するようであれば SpriteKit でコンテンツを作成するほうが便利ですよ。例えば、円などはシェイプノードを追加するだけなのでカスタムビューが不要です。

投稿2021/10/13 21:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問