From dbcd70e9936dc398a986f091a6a9886ed4ffce99 Mon Sep 17 00:00:00 2001 From: Frederic Barthelemy Date: Sat, 9 Sep 2017 15:38:06 -0700 Subject: [PATCH] Switch calls to NSLayoutConstraint.(de)activate AppleDocs say these are typically faster than directly adjusting isActive --- Sources/NSConstraintLayoutSet.swift | 19 ++++++++----------- Sources/UIView+Extensions.swift | 14 +++++++++----- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Sources/NSConstraintLayoutSet.swift b/Sources/NSConstraintLayoutSet.swift index a908fff5..0176433d 100644 --- a/Sources/NSConstraintLayoutSet.swift +++ b/Sources/NSConstraintLayoutSet.swift @@ -48,22 +48,19 @@ public class NSLayoutConstraintSet { self.width = width self.height = height } - - private func forEach(_ body: (NSLayoutConstraint) -> Void) { - let constraints = [top, bottom, left, right, centerX, centerY, width, height] - for constraint in constraints { - if let constraint = constraint { - body(constraint) - } - } - } + + /// All of the currently configured constraints + private var availableConstraints: [NSLayoutConstraint] { + return [top, bottom, left, right, centerX, centerY, width, height] + .flatMap {$0} + } /// Activates all of the non-nil constraints /// /// - Returns: Self @discardableResult func activate() -> Self { - forEach { $0.isActive = true } + NSLayoutConstraint.activate(availableConstraints) return self } @@ -72,7 +69,7 @@ public class NSLayoutConstraintSet { /// - Returns: Self @discardableResult func deactivate() -> Self { - forEach { $0.isActive = false } + NSLayoutConstraint.deactivate(availableConstraints) return self } } diff --git a/Sources/UIView+Extensions.swift b/Sources/UIView+Extensions.swift index 7bf913c6..e6cfc97f 100644 --- a/Sources/UIView+Extensions.swift +++ b/Sources/UIView+Extensions.swift @@ -31,10 +31,14 @@ extension UIView { return } translatesAutoresizingMaskIntoConstraints = false - leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true - rightAnchor.constraint(equalTo: superview.rightAnchor).isActive = true - topAnchor.constraint(equalTo: superview.topAnchor).isActive = true - bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true + + let constraints: [NSLayoutConstraint] = [ + leftAnchor.constraint(equalTo: superview.leftAnchor), + rightAnchor.constraint(equalTo: superview.rightAnchor), + topAnchor.constraint(equalTo: superview.topAnchor), + bottomAnchor.constraint(equalTo: superview.bottomAnchor), + ] + NSLayoutConstraint.activate(constraints) } @discardableResult @@ -83,7 +87,7 @@ extension UIView { constraints.append(constraint) } - constraints.forEach { $0.isActive = true } + NSLayoutConstraint.activate(constraints) return constraints } }