2016-10-31 4 views
0

メインのストーリーボードのサブビューであるビューとメインのストーリーボードのサブビューのサブビューの2つのビューが交差しているかどうかを検出しようとしています。Swift - 異なるスーパービューのサブビューが交差するかどうかを検出します。

subview1.frame.intersects(subview2.frame)を使用しようとしましたが動作しません。上記の関数は常にfalseを返します。

コンテキストについては、私はサブビュー1をドラッグしてサブビュー2にドロップしようとしており、.Endedの状態がPanGestureのときに2つのビュー間の衝突を検出しようとしています。

ビュー階層には、以下のように表すことができる。

:私は.intersectsが同じで2 rects座標を比較するので、それはそれが動作しないということであってもよいことだけを推測することができます

 main view 
    /  \ 
subview1  view2 
       \ 
       subview2 
+0

どうしたらうまくいかないのですか?エラーは何ですか?あなたはあなたの質問に答えることさえできるように、より多くの情報を提供する必要があります。 – fuzz

答えて

6

あなたのビュー階層を見ず.frameは常にあなたのスーパービューの座標にあるので、同じスーパービューを持つ兄弟でない限り、異なる座標空間を持つ可能性があります。 UIViewには、点または矩形をあるビューの座標空間から別の座標空間に変換する変換方法(convertRect:fromViewが必要です)があります。同じ座標空間に両方の矩形を入れたら、/ intersects()を使うことができます。

subview1.frame.intersects(subview1.convertRect(subview2.frame, fromView: subview2)) 
+0

はい、あなたは正しいです!あなたのコードを少し修正すれば、 'subview1.frame.intersects(self.view.convertRect(subview2.bounds、fromView:subview2))'は、2つが衝突したときにtrueを返します。しかし、 'subview1.bounds.intersects(subview2.bounds)'を使ってどうやって動くのでしょうか? – Alic

0

あなただけそれが交差するかどうかそしてちょうど

  • Xcodeのrun the project
  • ではview debugging
  • に、[OK]をクリックします下にdebug tab
  • に行くことを検出し、しようとしている場合show view frames

これらのビューが互いに交差するかどうかはわかりますか?私はそれが助けて欲しい

2

frameの代わりにboundsを使用して動作させました。私はhereによればsubview1

subview2上にドロップしたときに subview1.bounds.intersects(subview2.bounds)を使用することによって、それが trueが返されます。

をのUIViewの境界が長方形であり、位置(x、y)として表され、サイズ(幅、高さ)は、それ自身の座標系(0,0)を基準にしています。

のUIViewのフレームが長方形であり、位置(x、y)及びサイズ(幅、高さ)が内に含まれるスーパーにとして表さ。

2つのUIViewに異なる親がある場合、CGRectを独自の座標に関連させて使用するのはなぜか分かりません。もし誰かが説明をすることができれば私は答えとしてそれを受け入れるだろう。

関連する問題