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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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クリップ

8802閲覧

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

var screenWidth:CGFloat = 0 var screenHeight:CGFloat = 0 @IBOutlet weak var getimage: UIImageView! @IBOutlet weak var getphoto: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Screen Size の取得 screenWidth = self.view.bounds.width screenHeight = self.view.bounds.height let imageWidth = screenWidth * 210 / 148 let imagerect:CGRect = CGRect(x:0, y:0, width:screenWidth, height:imageWidth) // getimage(ImageView) frame をCGRectで作った矩形に合わせる getimage.frame = imagerect; // 画像の中心をスクリーンの中心位置に設定 getimage.center = CGPoint(x:screenWidth/2, y:screenHeight/2) // view に ImageView を追加する self.view.addSubview(getimage) } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { // getimage(UIImageView)のサイズを取得 let viewWidth: CGFloat = getimage.bounds.width //幅 let viewHeight: CGFloat = getimage.bounds.height //高さ //getphoto(UIImageView)のサイズ取得 let photoWidth = self.getphoto.frame.width let photoHeight = self.getphoto.frame.height 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) if let touch = touches.first { // タッチしたビューをviewプロパティで取得する if let touchedView = touch.view { // tag1のものを動かす if touchedView.tag == 1 { // gapX,gapYの取得は行わない touchedView.center = CGPoint(x: touch.location(in: view).x - gapX, y: touch.location(in: view).y - gapY) if touchedView.center.x <= rect.minX{ touchedView.center.x = rect.minX } if touchedView.center.x >= rect.maxX{ touchedView.center.x = rect.maxX } if touchedView.center.y <= rect.minY{ touchedView.center.y = rect.minY } if touchedView.center.y >= rect.maxY{ touchedView.center.y = rect.maxY } } } } } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { // gapXとgapYの初期化 gapX = 0.0 gapY = 0.0 } override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) { // touchesEndedと同じ処理 self.touchesEnded(touches, with: event) } }

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

Swiftのversionは4.1.2
Xcodeのversionは9.4.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Swift

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