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

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

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

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

解決済

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

mimamo
mimamo

総合スコア42

Swift

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

2回答

0グッド

0クリップ

9518閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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の中心を持って行こうとしたのですが、エラーが出てしまい手こずって質問させていただきました。

回答2

0

ベストアンサー

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

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

投稿2019/01/23 02:56

takabosoft

総合スコア8337

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

mimamo

2019/01/23 03:07

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

0

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

swift

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

投稿2019/01/15 05:24

fuzzball

総合スコア16727

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

mimamo

2019/01/19 03:20

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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