Skip to content

Instantly share code, notes, and snippets.

@khanhldt
Last active April 16, 2016 09:24
Show Gist options
  • Save khanhldt/ef08e2db3cee6690f00a0a1e2f38ecd7 to your computer and use it in GitHub Desktop.
Save khanhldt/ef08e2db3cee6690f00a0a1e2f38ecd7 to your computer and use it in GitHub Desktop.
NSLayoutConstraint builder that allows quick cloning / creation of a constraint.
//
// Created by Khanh Le Do on 16/4/16.
// Copyright © 2016 kloc. All rights reserved.
//
import Foundation
import UIKit
public class LayoutConstraintBuilder {
private var mOrigin: NSLayoutConstraint?
private var mFirstItem: AnyObject?
private var mSecondItem: AnyObject?
private var mPriority: UILayoutPriority?
private var mRelation: NSLayoutRelation?
private var mMultiplier: CGFloat?
private var mConstant: CGFloat?
private var mFirstAttribute: NSLayoutAttribute?
private var mSecondAttribute: NSLayoutAttribute?
public init() {
// Nothing to init
}
public init(origin: NSLayoutConstraint) {
self.mOrigin = origin
}
public func setFirstItem(firstItem: AnyObject?) -> LayoutConstraintBuilder {
self.mFirstItem = firstItem
return self
}
public func setSecondItem(secondItem: AnyObject?) -> LayoutConstraintBuilder {
self.mSecondItem = secondItem
return self
}
public func setPriority(priority: UILayoutPriority?) -> LayoutConstraintBuilder {
self.mPriority = priority
return self
}
public func setRelation(relation: NSLayoutRelation?) -> LayoutConstraintBuilder {
self.mRelation = relation
return self
}
public func setMultiplier(multiplier: CGFloat?) -> LayoutConstraintBuilder {
self.mMultiplier = multiplier
return self
}
public func setConstant(constant: CGFloat?) -> LayoutConstraintBuilder {
self.mConstant = constant
return self
}
public func setFirstAttribute(firstAttribute: NSLayoutAttribute?) -> LayoutConstraintBuilder {
self.mFirstAttribute = firstAttribute
return self
}
public func setSecondAttribute(secondAttribute: NSLayoutAttribute?) -> LayoutConstraintBuilder {
self.mSecondAttribute = secondAttribute
return self
}
public func build() -> NSLayoutConstraint {
let priority = (self.mPriority != nil ? self.mPriority : self.mOrigin?.priority)
let relation = (self.mRelation != nil ? self.mRelation : self.mOrigin?.relation)
let multiplier = (self.mMultiplier != nil ? self.mMultiplier : self.mOrigin?.multiplier)
let constant = (self.mConstant != nil ? self.mConstant : self.mOrigin?.constant)
let firstAttribute = (self.mFirstAttribute != nil ? self.mFirstAttribute : self.mOrigin?.firstAttribute)
let secondAttribute = (self.mSecondAttribute != nil ? self.mSecondAttribute : self.mOrigin?.secondAttribute)
let firstItem = (self.mFirstItem != nil ? self.mFirstItem : self.mOrigin?.firstItem)
let secondItem = (self.mSecondItem != nil ? self.mSecondItem : self.mOrigin?.secondItem)
let ret = NSLayoutConstraint(item: firstItem!, attribute: firstAttribute!, relatedBy: relation!, toItem: secondItem, attribute: secondAttribute!, multiplier: multiplier!, constant: constant!)
ret.priority = priority!
return ret
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment