たくさんのサブビューを含むビューがあります。ユーザーが一部のサブビューの周りで選択範囲をタップしてドラッグした場合、メインの親のすべてのサブビューを反復処理する以外に、どのサブビューが選択範囲と交差するかをすばやく判断する方法はありますか?
私の解決策は、すべてのサブビューを繰り返して使用することで機能していますCGRectIntersectsRect(selectionRect, aSubview.frame)
が、私の好みには遅すぎます。
たくさんのサブビューを含むビューがあります。ユーザーが一部のサブビューの周りで選択範囲をタップしてドラッグした場合、メインの親のすべてのサブビューを反復処理する以外に、どのサブビューが選択範囲と交差するかをすばやく判断する方法はありますか?
私の解決策は、すべてのサブビューを繰り返して使用することで機能していますCGRectIntersectsRect(selectionRect, aSubview.frame)
が、私の好みには遅すぎます。
短い答えはノーです。長い答えは、それは主にframe
が計算されたプロパティ、bounds
、center
およびの関数であるためですtransform
。単純なヒット テストでさえ、反復に基づいています。
本当の問題は、なぜ遅すぎると思うのかということです。何百ものビューがある場合は、ビューのフレームをキャッシュすることをお勧めします。たとえば、touchesBegan:withEvent:
フレームの計算を節約し、(指をドラッグして) 交差をチェックする必要があるたびに Objective-C メッセージを送信することをお勧めします。
おそらく、ビューをフレームの起点で並べ替えるなどの最適化のトリックを適用することもできますが、それではコードが複雑になります。