mirror of https://github.com/SnapKit/SnapKit
Improve the closest superview finder algorithm
This commit is contained in:
parent
116002cde7
commit
2701293432
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue