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

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

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

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

Q&A

解決済

2回答

11070閲覧

CGRectの中心位置を設定したい

mimamo

総合スコア44

Swift

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

0グッド

0クリップ

投稿2019/01/13 06:30

編集2019/01/15 13:34

前提・実現したいこと

矩形の中心(touchによって大きさが変化する)を、常に一定の場所に保ちたいのですが、うまくいきません。
ご教授よろしくお願いいたします。

エラー

rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2)

Value of type 'CGRect' has no member 'center'

該当のソースコード

getphoto(UIImageView)はtouchによって位置が変わります。

swift

1 2 var screenWidth:CGFloat = 0 3 var screenHeight:CGFloat = 0 4 5 @IBOutlet weak var getimage: UIImageView! 6 7 @IBOutlet weak var getphoto: UIImageView! 8 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 // Screen Size の取得 14 screenWidth = self.view.bounds.width 15 screenHeight = self.view.bounds.height 16 17 let imageWidth = screenWidth * 210 / 148 18 let imagerect:CGRect = CGRect(x:0, y:0, width:screenWidth, height:imageWidth) 19 20 // getimage(ImageView) frame をCGRectで作った矩形に合わせる 21 getimage.frame = imagerect; 22 23 // 画像の中心をスクリーンの中心位置に設定 24 getimage.center = CGPoint(x:screenWidth/2, y:screenHeight/2) 25 26 // view に ImageView を追加する 27 self.view.addSubview(getimage) 28} 29 30 31 32 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 33// getimage(UIImageView)のサイズを取得 34 let viewWidth: CGFloat = getimage.bounds.width //幅 35 let viewHeight: CGFloat = getimage.bounds.height //高さ 36 37 //getphoto(UIImageView)のサイズ取得 38 let photoWidth = self.getphoto.frame.width 39 let photoHeight = self.getphoto.frame.height 40 41 let rect = CGRect(x: photoWidth/2 ,y: photoHeight/2 + 64 ,width: viewWidth-photoWidth ,height: viewHeight-photoHeight) 42 43 rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2) 44 45 46 47 if let touch = touches.first { 48 // タッチしたビューをviewプロパティで取得する 49 if let touchedView = touch.view { 50 // tag1のものを動かす 51 if touchedView.tag == 1 { 52 // gapX,gapYの取得は行わない 53 touchedView.center = CGPoint(x: touch.location(in: view).x - gapX, y: touch.location(in: view).y - gapY) 54 55 56 if touchedView.center.x <= rect.minX{ 57 touchedView.center.x = rect.minX 58 } 59 if touchedView.center.x >= rect.maxX{ 60 touchedView.center.x = rect.maxX 61 } 62 if touchedView.center.y <= rect.minY{ 63 touchedView.center.y = rect.minY 64 } 65 if touchedView.center.y >= rect.maxY{ 66 touchedView.center.y = rect.maxY 67 } 68 } 69 } 70 } 71 } 72 73 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 74 75 // gapXとgapYの初期化 76 gapX = 0.0 77 gapY = 0.0 78 } 79 80 override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) { 81 // touchesEndedと同じ処理 82 self.touchesEnded(touches, with: event) 83 } 84 85 } 86 87

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

Swiftのversionは4.1.2
Xcodeのversionは9.4.1

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

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

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

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

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

fuzzball

2019/01/15 05:34

let rect = CGRect(x: photoWidth/2 ,y: photoHeight/2 + 64 ,width: viewWidth-photoWidth ,height: viewHeight-photoHeight) rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2) この二行の意味/意図が分かりません。言葉で説明して下さい。
mimamo

2019/01/15 06:15

すみません、説明させていただきます。 getphoto(UIImageView)は画面上を自由に移動できるのですが、getimage(UIImageView)の中におさめたかったのでrectを作りました。 y: photoHeight/2 + 64 の64は、Navigationbarを使っているのでその分を目分量でRectのy座標を変更しています。 rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2) は、Rectを画面中心位置に持っていきたいなと思いそのまま付け足した感じになります。 画面の中心に持っていくことが、+64をする必要はなくなります。
fuzzball

2019/01/15 06:29

+64 だけではなく、photoWidth/2 も photoHeight/2 も必要なくなりますよね? まとめると「UIImageViewを画面の中心に表示したい」でいいのでしょうか?
mimamo

2019/01/15 06:40

そうですね!必要なくなります。 Rect内であれば好きな場所にgetphoto(UIImageView)を配置できるようにしたいので、 UIImageViewではなく、CGRectを画面の中心に持っていきたいということになります。 getimage(UIImageView)はすでに画面中心に配置しています。
fuzzball

2019/01/15 06:42

そのCGRectは何に使うのでしょうか?
mimamo

2019/01/15 07:17

CGRect内にgetphoto(UIImageView)のセンターがおさまるようにし、getimage(UIImageView)の中でだけgetphotoを動かせるようにしています。
fuzzball

2019/01/15 07:28

getimageのframeってことですか?
fuzzball

2019/01/15 07:43 編集

「動かせるようにしています」とのことですが、まだそのコードはありませんよね? 「動かせるようにしたいです」ということですか?
mimamo

2019/01/15 13:35 編集

お返事遅くなりすみません。今気づいたのですがrectがふたつあったので、質問本文のコードを変更しています、、、。 Rect内にgetphotoの中心をおさめるようにすでにコーディングしています。 またそのコードも載せておきました。
fuzzball

2019/01/16 01:20 編集

2019/01/15 15:15のコメントに対する再確認になりますが、 「画面の中心」と書いているのは、「スマホの画面の中心」ではなく「ナビゲーションバー(とステータスバーも?)を除いた矩形の中心」ということでいいでしょうか? rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2) このコードだと(エラーが出なかったとしても)「スマホの画面の中心」になってしまうと思うのですが、それではダメなんですよね?
mimamo

2019/01/16 02:19

そうですね、おっしゃる通り「ナビゲーションバーとステータスバーとツールバー(画面の下に使用しています)を除いた矩形の中心」が理想になります。 ひとまずわかりやすく画面中心にRectの中心を持って行こうとしたのですが、エラーが出てしまい手こずって質問させていただきました。
guest

回答2

0

ベストアンサー

本当にやりたいことを理解していませんが、CGRectのcenterを調整したいのでしたら、
こういうextensionを入れれば良いと思います。

cotkjaer/CGRect+Center.swift
https://gist.github.com/cotkjaer/9b5af14a473e7c20fec1b0e965fe302b

投稿2019/01/23 02:56

takabosoft

総合スコア8356

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

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

mimamo

2019/01/23 03:07

こちらもextensionで調整ができるのですね、勉強になりました。ありがとうございます!
guest

0

矩形(UIView)の.centerに設定して下さい。

swift

1let v = UIView() 2v.center = CGPoint(x:screenWidth/2, y:screenHeight/2)

投稿2019/01/15 05:24

fuzzball

総合スコア16731

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

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

mimamo

2019/01/19 03:20

お返事遅くなりすみません! ご回答ありがとうございます。 rectを一旦UIViewに設定し直した方がいいということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問