Browse Source

Improve the closest superview finder algorithm

Robert Payne 11 years ago
parent
commit
2701293432
1 changed files with 19 additions and 11 deletions
  1. 19 11
      Snap/Constraint.swift

+ 19 - 11
Snap/Constraint.swift

@@ -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
     }
 }