前提・実現したいこと
矩形の中心(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
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)
この二行の意味/意図が分かりません。言葉で説明して下さい。
すみません、説明させていただきます。
getphoto(UIImageView)は画面上を自由に移動できるのですが、getimage(UIImageView)の中におさめたかったのでrectを作りました。
y: photoHeight/2 + 64 の64は、Navigationbarを使っているのでその分を目分量でRectのy座標を変更しています。
rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2)
は、Rectを画面中心位置に持っていきたいなと思いそのまま付け足した感じになります。
画面の中心に持っていくことが、+64をする必要はなくなります。
+64 だけではなく、photoWidth/2 も photoHeight/2 も必要なくなりますよね?
まとめると「UIImageViewを画面の中心に表示したい」でいいのでしょうか?
そうですね!必要なくなります。
Rect内であれば好きな場所にgetphoto(UIImageView)を配置できるようにしたいので、
UIImageViewではなく、CGRectを画面の中心に持っていきたいということになります。
getimage(UIImageView)はすでに画面中心に配置しています。
そのCGRectは何に使うのでしょうか?
CGRect内にgetphoto(UIImageView)のセンターがおさまるようにし、getimage(UIImageView)の中でだけgetphotoを動かせるようにしています。
getimageのframeってことですか?
「動かせるようにしています」とのことですが、まだそのコードはありませんよね?
「動かせるようにしたいです」ということですか?
お返事遅くなりすみません。今気づいたのですがrectがふたつあったので、質問本文のコードを変更しています、、、。
Rect内にgetphotoの中心をおさめるようにすでにコーディングしています。
またそのコードも載せておきました。
2019/01/15 15:15のコメントに対する再確認になりますが、
「画面の中心」と書いているのは、「スマホの画面の中心」ではなく「ナビゲーションバー(とステータスバーも?)を除いた矩形の中心」ということでいいでしょうか?
rect.center = CGPoint(x:screenWidth/2, y:screenHeight/2)
このコードだと(エラーが出なかったとしても)「スマホの画面の中心」になってしまうと思うのですが、それではダメなんですよね?
そうですね、おっしゃる通り「ナビゲーションバーとステータスバーとツールバー(画面の下に使用しています)を除いた矩形の中心」が理想になります。
ひとまずわかりやすく画面中心にRectの中心を持って行こうとしたのですが、エラーが出てしまい手こずって質問させていただきました。
回答2件
あなたの回答
tips
プレビュー