在两个UIView
实例之间查找最低共同祖先的最有效方法是什么?
除了实现Lowest Common Ancestor之外,是否可以利用UIKit
API来找到它?NSView
具有ancestorSharedWithView:
,因此我怀疑此更新可能要早于iOS添加。
我目前正在使用这种快速而肮脏的解决方案,如果给定的 View 不是同级或直接祖先,则效率很低。
- (UIView*)lyt_ancestorSharedWithView:(UIView*)aView
{
if (aView == nil) return nil;
if (self == aView) return self;
if (self == aView.superview) return self;
UIView *ancestor = [self.superview lyt_ancestorSharedWithView:aView];
if (ancestor) return ancestor;
return [self lyt_ancestorSharedWithView:aView.superview];
}
(对于那些实现类似方法的人,Lyt项目的单元测试可能会有所帮助)
最佳答案
使用 -isDescendantOfView: 并不太难。
- (UIView *)my_ancestorSharedWithView:(UIView *)aView
{
UIView *testView = self;
while (testView && ![aView isDescendantOfView:testView])
{
testView = [testView superview];
}
return testView;
}
关于ios - 两个 View 之间共享祖先,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22666535/