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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

1回答

3842閲覧

画像タップ時の座標取得について

skmsk

総合スコア10

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

1クリップ

投稿2017/07/19 10:37

###前提・実現したいこと
iOS端末にて画像をタップした箇所の座標を取得して、
該当箇所のRGBA値を取得したいです。

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

お世話になります。Swift初心者です。 タップ時に取得した座標はUIView上での座標になるため、 その中にあるUIImageView内の座標とは異なってしまいます。 そのため、UIImageView自体の高さ・幅を算出して、位置を特定する仕組みにしていますが、うまく取得できておりません。 UIViewとUIImageViewを同じ大きさにする方法はありますか? また、ない場合どのように座標を計算すればいいでしょうか。 駄文ではございますが、ご教授いただけるとありがたいです。 よろしくおねがいします。

###該当のソースコード

Swift

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 @IBOutlet weak var myImageView: UIImageView! 7 @IBOutlet weak var labelX: UILabel! 8 @IBOutlet weak var labelY: UILabel! 9 @IBOutlet weak var ColorArea: UILabel! 10 @IBOutlet weak var labelR: UILabel! 11 @IBOutlet weak var labelG: UILabel! 12 @IBOutlet weak var labelB: UILabel! 13 @IBOutlet weak var labelA: UILabel! 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 // Do any additional setup after loading the view, typically from a nib. 18 19 myImageView.isUserInteractionEnabled = true 20 ColorArea.layer.borderWidth = 4.0 21 22 } 23 24 //タップ時の座標を取得 25 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 26 27 let touchEvent = touches.first! 28 29 let point = touchEvent.location(in: self.myImageView) 30 let pointX: String = NSString(format: "%.2F", point.x) as String 31 let pointY: String = NSString(format: "%.2F", point.y) as String 32 labelX.text = pointX 33 labelY.text = pointY 34 35 //imageをdata化 36 let pixelData = myImageView.image!.cgImage!.dataProvider!.data 37 let data: UnsafePointer = CFDataGetBytePtr(pixelData) 38 39 //タップした位置の座標にあたるアドレスを算出 40 let pixelAd: Int = ((Int(myImageView.image!.size.width) * Int(point.y)) + Int(point.x)) * 4 41 42 let r = CGFloat(Int( CGFloat(data[pixelAd])/CGFloat(255.0)*1000)) / 1000 43 let g = CGFloat(Int( CGFloat(data[pixelAd+1])/CGFloat(255.0)*1000)) / 1000 44 let b = CGFloat(Int( CGFloat(data[pixelAd+2])/CGFloat(255.0)*1000)) / 1000 45 let a = CGFloat(Int( CGFloat(data[pixelAd+3])/CGFloat(255.0)*1000)) / 1000 46 47 let pixelColors = [r,g,b,a] 48 print(pixelColors) 49 let OutputColor = UIColor(red: r, green: g, blue: b, alpha: a) 50 ColorArea.backgroundColor = OutputColor 51 52 53 } 54 55 56 57 override func didReceiveMemoryWarning() { 58 super.didReceiveMemoryWarning() 59 // Dispose of any resources that can be recreated. 60 } 61 62} 63

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

guest

回答1

0

はじめまして。

こちらは参考になりませんか?

【Swift】画像のタップした座標を正しく取得する

投稿2017/07/19 12:48

KOBAYASHI.Jun

総合スコア250

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問