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

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

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

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

Swift

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

Q&A

解決済

1回答

5977閲覧

【Swift】Viewの座標位置の変換がうまくいかない。

mmmm

総合スコア54

iOS

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

Swift

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

0グッド

0クリップ

投稿2016/12/27 22:40

###前提・実現したいこと
UIViewに枠線をつけ画面中央に配置しており、その中に収まっている部分のUIImagewのimageを取得したいのです。
Viewに収まっている部分をconvertメソッドでImageViewの座標部分を取得
しようとしているのですが、うまくいきません。
アドバイスいただければありがたいです。
###発生している問題・エラーメッセージ

ここの変換がうまくいってないのではないかと考えております。 let rect = myView.convert(myView.bounds, to: imageView)

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

lass CutViewController: UIViewController , UIScrollViewDelegate { @IBOutlet weak var scrollView: UIScrollView! var imageView: UIImageView! var myView: UIView! override func viewDidLoad() { super.viewDidLoad() scrollView.backgroundColor = UIColor.gray scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+60) scrollView.bounces = true scrollView.indicatorStyle = .white scrollView.scrollIndicatorInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) scrollView.delegate = self imageView = UIImageView(frame: CGRect(x:0,y:0,width:300,height:300)) let myImage = UIImage(named: "aaa_60@3x.png") imageView.image = myImage imageView.layer.position = CGPoint(x: self.view.center.x, y: self.view.center.y) scrollView.addSubview(imageView) self.view.addSubview(scrollView) myView = UIView(frame: CGRect(x:0,y:0,width:180,height:180)) myView.layer.position = CGPoint(x: self.view.center.x, y: self.view.center.y) myView.layer.borderColor = UIColor.white.cgColor myView.layer.borderWidth = 2.0 myView.layer.zPosition = 100 scrollView.addSubview(myView) self.setButton() } func cutImageView(){ ここの変換がうまくいかない。 let rect = myView.convert(myView.bounds, to: imageView) print("bouds") print(myView.bounds) print("frame") print(myView.frame) print("rect") print(rect) let cropCGImageRef = imageView.image?.cgImage?.cropping(to: rect) let cropImage = UIImage(cgImage: cropCGImageRef!) let view3 = UIImageView(frame: CGRect(x:0,y:0,width:180,height:180)) view3.image = cropImage self.view.addSubview(view3) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func setButton(){ let button = UIButton(frame: CGRect(x:0,y:0,width:50,height:50)) button.setTitle("ボタン", for: .normal) button.setTitleColor(UIColor.blue, for: .normal) button.addTarget(self, action: #selector(buttonEvent(sender:)), for: .touchUpInside) button.sizeToFit() button.center = self.view.center self.view.addSubview(button) } func buttonEvent(sender: UIButton) { cutImageView() } func scrollViewDidScroll(_ scrollView: UIScrollView) { myView.layer.position = CGPoint(x: self.view.center.x + scrollView.contentOffset.x, y: self.view.center.y + scrollView.contentOffset.y) func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { print("beginDragging") } }

###試したこと
課題に対してアプローチしたことを記載してください

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

imageViewに乗せる画像は実サイズでないとダメっぽいです。ファイル名が、aaa_60@3x.pngだとRetinaに対応したサイズになりますので、@3xをとってください。

テスト
イメージ説明

swift

1 2import UIKit 3 4class CutViewController: UIViewController , UIScrollViewDelegate { 5 6 @IBOutlet weak var scrollView: UIScrollView! 7 var imageView: UIImageView! 8 var myView: UIView! 9 var view3:UIImageView! 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 scrollView.backgroundColor = UIColor.gray 15 16 scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+60) 17 18 scrollView.bounces = true 19 scrollView.indicatorStyle = .white 20 scrollView.scrollIndicatorInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 21 scrollView.delegate = self 22 23 //imageView = UIImageView(frame: CGRect(x:0,y:0,width:300,height:300)) 24 let myImage = UIImage(named: "aka.png") 25 // imageViewをmyImageの実サイズでインスタンス 26 imageView = UIImageView(frame: CGRect(x:0,y:0,width:(myImage?.size.width)!,height:(myImage?.size.height)!)) 27 imageView.image = myImage 28 29 imageView.layer.position = CGPoint(x: self.view.center.x, y: self.view.center.y) 30 scrollView.addSubview(imageView) 31 self.view.addSubview(scrollView) 32 33 myView = UIView(frame: CGRect(x:0,y:0,width:80,height:80)) 34 myView.layer.position = CGPoint(x: self.view.center.x, y: self.view.center.y) 35 myView.layer.borderColor = UIColor.white.cgColor 36 myView.layer.borderWidth = 2.0 37 myView.layer.zPosition = 100 38 scrollView.addSubview(myView) 39 40 self.setButton() 41 42 } 43 44 45 func cutImageView(){ 46 47 48 if let _ = view3 { 49 view3.removeFromSuperview() 50 } else { 51 view3 = UIImageView(frame: CGRect(x:0,y:0,width:80,height:80)) 52 } 53 54 let rect = myView.convert(myView.bounds, to: imageView) 55 56 print("bouds") 57 print(myView.bounds) 58 print("frame") 59 print(myView.frame) 60 print("rect") 61 print(rect) 62 let cropCGImageRef = imageView.image?.cgImage?.cropping(to: rect) 63 let cropImage = UIImage(cgImage: cropCGImageRef!) 64 //let view3 = UIImageView(frame: CGRect(x:0,y:0,width:180,height:180)) 65 view3.contentMode = .scaleAspectFit 66 view3.image = cropImage 67 view3.frame = CGRect(x:0,y:40,width:80,height:80) 68 self.view.addSubview(view3) 69 } 70 71 override func didReceiveMemoryWarning() { 72 super.didReceiveMemoryWarning() 73 } 74 75 func setButton(){ 76 77 let button = UIButton(frame: CGRect(x:20,y:600,width:50,height:50)) 78 button.setTitle("crop", for: .normal) 79 button.setTitleColor(UIColor.blue, for: .normal) 80 button.addTarget(self, action: #selector(buttonEvent(sender:)), for: .touchUpInside) 81 button.sizeToFit() 82 //button.center = self.view.center 83 self.view.addSubview(button) 84 } 85 86 87 func buttonEvent(sender: UIButton) { 88 cutImageView() 89 } 90 91 92 func scrollViewDidScroll(_ scrollView: UIScrollView) { 93 myView.layer.position = CGPoint(x: self.view.center.x + scrollView.contentOffset.x, y: self.view.center.y + scrollView.contentOffset.y) 94 95 96 func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 97 print("beginDragging") 98 } 99 } 100}

投稿2016/12/28 17:07

fromageblanc

総合スコア2724

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

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

mmmm

2016/12/30 05:48

いつもありがとうございます。本当に助かります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問