Switch calls to NSLayoutConstraint.(de)activate

AppleDocs say these are typically faster than directly adjusting isActive
This commit is contained in:
Frederic Barthelemy
2017-09-09 15:38:06 -07:00
parent 655d23bbc8
commit dbcd70e993
2 changed files with 17 additions and 16 deletions
+8 -11
View File
@@ -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
}
}
+9 -5
View File
@@ -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
}
}