Improve the closest superview finder algorithm

This commit is contained in:
Robert Payne 2015-02-17 11:37:43 +13:00
parent 116002cde7
commit 2701293432
1 changed files with 19 additions and 11 deletions

View File

@ -506,19 +506,27 @@ public class Constraint {
}
private class func closestCommonSuperviewFromView(fromView: View?, toView: View?) -> View? {
var closestCommonSuperview: View?
var secondViewSuperview: View? = toView
while closestCommonSuperview == nil && secondViewSuperview != nil {
var firstViewSuperview = fromView
while closestCommonSuperview == nil && firstViewSuperview != nil {
if secondViewSuperview == firstViewSuperview {
closestCommonSuperview = secondViewSuperview
var views = NSMutableSet()
var fromView = fromView
var toView = toView
do {
if let view = toView {
if views.containsObject(view) {
return view
}
firstViewSuperview = firstViewSuperview?.superview
views.addObject(view)
toView = view.superview
}
secondViewSuperview = secondViewSuperview?.superview
}
return closestCommonSuperview
if let view = fromView {
if views.containsObject(view) {
return view
}
views.addObject(view)
fromView = view.superview
}
} while (fromView != nil || toView != nil)
return nil
}
}