質問するログイン新規登録
Swift

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

Q&A

解決済

2回答

3025閲覧

Swiftで子のView同士の重なりを判定するにはどうすればいいでしょうか?

Hayato1201

総合スコア232

Swift

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

0グッド

0クリップ

投稿2019/01/14 06:00

0

0

親のUIview、BaceViewがあったとして、

Swift

1for i in 0 ..<30{ 2 let childView = UIView() 3 childView.frame = CGRect(x: x, y: y, width: width, height: height) 4 BaceView.addSubview(childView) 5}

の様にどんどんviewを追加していくとします。この時x,y,width,heightは様々な値をとり、子view同士は重なる事もあります。その際重なっている子view同士を取得する様なことは可能でしょうか?

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

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

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

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

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

fuzzball

2019/01/15 01:01

矩形同士の当たり判定の方法が分からないということでしょうか?
guest

回答2

0

ベストアンサー

CGRect同士が重なっているかはintersects関数で容易に判断できます。
https://developer.apple.com/documentation/coregraphics/cgrect/1454747-intersects

サブビュー同士あれば

swift

1if targetSubview.frame.intersects(otherSubview.frame) { 2 // 重なってる 3}

などと書けば判定できると思います。

あとは、
何か追加したいときに予め重なりそうかどうかを調べたければ
1つのCGRectとすべてのサブビューを比較すればいいですし、

質問欄の文字通り「重なっている子view同士を取得する様なことは可能でしょうか?」を実現したいのであれば、
すべてのサブビューの組み合わせでframeが重なっているかを確認すればよいです。

#あとたぶんBaceはBaseの間違いかと。

投稿2019/01/15 08:53

編集2019/01/15 08:55
takabosoft

総合スコア8356

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

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

0

viewの4隅を取得する funcを作成し、
その中で、比較するviewの4隅と重なるかどうか判定し、
false, trueを返すようにすればいいのではないでしょうか?

投稿2019/01/14 12:19

hameji001

総合スコア639

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問