Last active
April 16, 2016 09:24
-
-
Save khanhldt/ef08e2db3cee6690f00a0a1e2f38ecd7 to your computer and use it in GitHub Desktop.
NSLayoutConstraint builder that allows quick cloning / creation of a constraint.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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