2
2以上のビュー(UIView
)の任意のセットが与えられているので、それらのビューの(最も近い)共通の親を決定したいと考えています。 Swiftでこれに対して最も効率的なアルゴリズムは何ですか?これらの階層に基づいてSwiftの共通の親ビュー
:
┌─────┐
│ A │
└─────┘
▲
┌────────────┴────────────┐
│ │
┌─────┐ ┌─────┐ ┌─────┐
│ B │ │ C │ │ X │
└─────┘ └─────┘ └─────┘
▲ ▲ ▲
┌──────┴──────┐ ┌──────┴──────┐ │
│ │ │ │ │
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ D │ │ E │ │ F │ │ G │ │ Y │ │ Z │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘
- 何の景色が設けられていない場合は、nilを返します。
- ビューが1つの場合は、
superview
またはnilを返します。 - ビューに
superview
(「A」、「X」、または「Z」など)がない場合は、nilを返します。 - ビューが同じ階層(「A」または「X」階層など)に属していない場合は、nilを返します。
例:
Larmeの提案@に基づいて// no views
[].commonParent() // nil
// 1 view
[D].commonParent() // B
// siblings
[D,E].commonParent() // B
// child/parent
[D,B].commonParent() // A
// cousins
[D,F].commonParent() // A
// > 2 views
[D,E,F].commonParent() // A
// with root view
[D,A].commonParent() // nil
// unrelated hierarchies
[D,Y].commonParent() // nil
// unrelated view
[D,Z].commonParent() // nil
はい、「UIView」です。同じことがNSViewにも当てはまります。 –
具体的には、Swift(Objective-Cではなく)を使用するアルゴリズムを探しています。私の知る限りでは、共通の親ビューを決定するのに役立つUIKitには何もありません。 –
Objective-Cはなぜですか?それはUIKitについてですから、同様のアプローチが可能です。 UIViewには、そのために使用できる 'isDescendantOfView:'メソッドがあります。したがって、最初のビューの 'superView'を繰り返しながら、もう一方が子孫であるかどうかを確認します。 – Larme