mirror of https://github.com/SnapKit/SnapKit
Convert protocol hierarchy to class hierarchy
This has no value unto itself, but is necessary for adding default arguments to the ConstraintDescriptionRelatable methods, which we'll need to instrument in source locations.
This commit is contained in:
parent
cd49354220
commit
104ce8895c
|
@ -106,138 +106,231 @@ extension View : RelationTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ConstraintItem : RelationTarget {
|
||||||
|
public var constraintItem : ConstraintItem {
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to expose the final API of a `ConstraintDescription` which allows getting a constraint from it
|
Used to expose the final API of a `ConstraintDescription` which allows getting a constraint from it
|
||||||
*/
|
*/
|
||||||
public protocol ConstraintDescriptionFinalizable: class {
|
public class ConstraintDescriptionFinalizable {
|
||||||
|
|
||||||
var constraint: Constraint { get }
|
private let backing : ConstraintDescription
|
||||||
|
|
||||||
|
internal init(_ backing : ConstraintDescription) {
|
||||||
|
self.backing = backing
|
||||||
|
}
|
||||||
|
|
||||||
|
public var constraint: Constraint {
|
||||||
|
return backing.constraint
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to expose priority APIs
|
Used to expose priority APIs
|
||||||
*/
|
*/
|
||||||
public protocol ConstraintDescriptionPriortizable: ConstraintDescriptionFinalizable {
|
public class ConstraintDescriptionPriortizable: ConstraintDescriptionFinalizable {
|
||||||
|
|
||||||
func priority(priority: FloatConvertible) -> ConstraintDescriptionFinalizable
|
public func priority(priority: FloatConvertible) -> ConstraintDescriptionFinalizable {
|
||||||
func priorityRequired() -> ConstraintDescriptionFinalizable
|
return ConstraintDescriptionFinalizable(self.backing.priority(priority))
|
||||||
func priorityHigh() -> ConstraintDescriptionFinalizable
|
}
|
||||||
func priorityMedium() -> ConstraintDescriptionFinalizable
|
|
||||||
func priorityLow() -> ConstraintDescriptionFinalizable
|
public func priorityRequired() -> ConstraintDescriptionFinalizable {
|
||||||
|
return ConstraintDescriptionFinalizable(self.backing.priorityRequired())
|
||||||
|
}
|
||||||
|
public func priorityHigh() -> ConstraintDescriptionFinalizable {
|
||||||
|
return ConstraintDescriptionFinalizable(self.backing.priorityHigh())
|
||||||
|
}
|
||||||
|
public func priorityMedium() -> ConstraintDescriptionFinalizable {
|
||||||
|
return ConstraintDescriptionFinalizable(self.backing.priorityMedium())
|
||||||
|
}
|
||||||
|
public func priorityLow() -> ConstraintDescriptionFinalizable {
|
||||||
|
return ConstraintDescriptionFinalizable(self.backing.priorityLow())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to expose multiplier & constant APIs
|
Used to expose multiplier & constant APIs
|
||||||
*/
|
*/
|
||||||
public protocol ConstraintDescriptionEditable: ConstraintDescriptionPriortizable {
|
public class ConstraintDescriptionEditable: ConstraintDescriptionPriortizable {
|
||||||
|
|
||||||
func multipliedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable
|
public func multipliedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.multipliedBy(amount))
|
||||||
|
}
|
||||||
|
|
||||||
func dividedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable
|
public func dividedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
||||||
|
return self.multipliedBy(1 / amount.floatValue)
|
||||||
func offset(amount: FloatConvertible) -> ConstraintDescriptionEditable
|
}
|
||||||
func offset(amount: CGPoint) -> ConstraintDescriptionEditable
|
|
||||||
func offset(amount: CGSize) -> ConstraintDescriptionEditable
|
|
||||||
func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable
|
|
||||||
|
|
||||||
func inset(amount: FloatConvertible) -> ConstraintDescriptionEditable
|
public func offset(amount : FloatConvertible) -> ConstraintDescriptionEditable {
|
||||||
func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable
|
return ConstraintDescriptionEditable(self.backing.offset(amount))
|
||||||
|
}
|
||||||
|
public func offset(amount: CGPoint) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.offset(amount))
|
||||||
|
}
|
||||||
|
public func offset(amount: CGSize) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.offset(amount))
|
||||||
|
}
|
||||||
|
public func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.offset(amount))
|
||||||
|
}
|
||||||
|
|
||||||
|
public func inset(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.inset(amount))
|
||||||
|
}
|
||||||
|
public func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.inset(amount))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to expose relation APIs
|
Used to expose relation APIs
|
||||||
*/
|
*/
|
||||||
public protocol ConstraintDescriptionRelatable: class {
|
public class ConstraintDescriptionRelatable {
|
||||||
|
|
||||||
|
private let backing : ConstraintDescription
|
||||||
|
|
||||||
func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable
|
init(_ backing : ConstraintDescription) {
|
||||||
func equalTo(other: RelationTarget) -> ConstraintDescriptionEditable
|
self.backing = backing
|
||||||
@available(iOS 7.0, *)
|
}
|
||||||
func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable
|
|
||||||
|
|
||||||
func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable
|
|
||||||
func lessThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable
|
public func equalTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
||||||
@available(iOS 7.0, *)
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal))
|
||||||
func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable
|
}
|
||||||
|
public func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal))
|
||||||
|
}
|
||||||
|
|
||||||
func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable
|
public func lessThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
||||||
func greaterThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo))
|
||||||
@available(iOS 7.0, *)
|
}
|
||||||
func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable
|
public func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo))
|
||||||
|
}
|
||||||
|
|
||||||
|
public func greaterThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo))
|
||||||
|
}
|
||||||
|
public func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to expose chaining APIs
|
Used to expose chaining APIs
|
||||||
*/
|
*/
|
||||||
public protocol ConstraintDescriptionExtendable: ConstraintDescriptionRelatable {
|
public class ConstraintDescriptionExtendable: ConstraintDescriptionRelatable {
|
||||||
|
|
||||||
var left: ConstraintDescriptionExtendable { get }
|
public var left: ConstraintDescriptionExtendable {
|
||||||
var top: ConstraintDescriptionExtendable { get }
|
return ConstraintDescriptionExtendable(self.backing.left)
|
||||||
var bottom: ConstraintDescriptionExtendable { get }
|
}
|
||||||
var right: ConstraintDescriptionExtendable { get }
|
public var top: ConstraintDescriptionExtendable {
|
||||||
var leading: ConstraintDescriptionExtendable { get }
|
return ConstraintDescriptionExtendable(self.backing.top)
|
||||||
var trailing: ConstraintDescriptionExtendable { get }
|
}
|
||||||
var width: ConstraintDescriptionExtendable { get }
|
public var bottom: ConstraintDescriptionExtendable {
|
||||||
var height: ConstraintDescriptionExtendable { get }
|
return ConstraintDescriptionExtendable(self.backing.bottom)
|
||||||
var centerX: ConstraintDescriptionExtendable { get }
|
}
|
||||||
var centerY: ConstraintDescriptionExtendable { get }
|
public var right: ConstraintDescriptionExtendable {
|
||||||
var baseline: ConstraintDescriptionExtendable { get }
|
return ConstraintDescriptionExtendable(self.backing.right)
|
||||||
|
}
|
||||||
|
public var leading: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.leading)
|
||||||
|
}
|
||||||
|
public var trailing: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.trailing)
|
||||||
|
}
|
||||||
|
public var width: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.width)
|
||||||
|
}
|
||||||
|
public var height: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.height)
|
||||||
|
}
|
||||||
|
public var centerX: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.centerX)
|
||||||
|
}
|
||||||
|
public var centerY: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.centerY)
|
||||||
|
}
|
||||||
|
public var baseline: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.baseline)
|
||||||
|
}
|
||||||
|
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var firstBaseline: ConstraintDescriptionExtendable { get }
|
public var firstBaseline: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.firstBaseline)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var leftMargin: ConstraintDescriptionExtendable { get }
|
public var leftMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.leftMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var rightMargin: ConstraintDescriptionExtendable { get }
|
public var rightMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.rightMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var topMargin: ConstraintDescriptionExtendable { get }
|
public var topMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.topMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var bottomMargin: ConstraintDescriptionExtendable { get }
|
public var bottomMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.bottomMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var leadingMargin: ConstraintDescriptionExtendable { get }
|
public var leadingMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.leadingMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var trailingMargin: ConstraintDescriptionExtendable { get }
|
public var trailingMargin: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.trailingMargin)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var centerXWithinMargins: ConstraintDescriptionExtendable { get }
|
public var centerXWithinMargins: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.centerXWithinMargins)
|
||||||
|
}
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
var centerYWithinMargins: ConstraintDescriptionExtendable { get }
|
public var centerYWithinMargins: ConstraintDescriptionExtendable {
|
||||||
|
return ConstraintDescriptionExtendable(self.backing.centerYWithinMargins)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Used to internally manage building constraint
|
Used to internally manage building constraint
|
||||||
*/
|
*/
|
||||||
internal class ConstraintDescription: ConstraintDescriptionExtendable, ConstraintDescriptionEditable, ConstraintDescriptionFinalizable {
|
internal class ConstraintDescription {
|
||||||
|
|
||||||
internal var left: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Left) }
|
private var left: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Left) }
|
||||||
internal var top: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Top) }
|
private var top: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Top) }
|
||||||
internal var right: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Right) }
|
private var right: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Right) }
|
||||||
internal var bottom: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Bottom) }
|
private var bottom: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Bottom) }
|
||||||
internal var leading: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Leading) }
|
private var leading: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Leading) }
|
||||||
internal var trailing: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Trailing) }
|
private var trailing: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Trailing) }
|
||||||
internal var width: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Width) }
|
private var width: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Width) }
|
||||||
internal var height: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Height) }
|
private var height: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Height) }
|
||||||
internal var centerX: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterX) }
|
private var centerX: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterX) }
|
||||||
internal var centerY: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterY) }
|
private var centerY: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterY) }
|
||||||
internal var baseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Baseline) }
|
private var baseline: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Baseline) }
|
||||||
|
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var firstBaseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.FirstBaseline) }
|
private var firstBaseline: ConstraintDescription { return self.addConstraint(ConstraintAttributes.FirstBaseline) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var leftMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeftMargin) }
|
private var leftMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.LeftMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var rightMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.RightMargin) }
|
private var rightMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.RightMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var topMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TopMargin) }
|
private var topMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.TopMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var bottomMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.BottomMargin) }
|
private var bottomMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.BottomMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var leadingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeadingMargin) }
|
private var leadingMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.LeadingMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var trailingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TrailingMargin) }
|
private var trailingMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.TrailingMargin) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var centerXWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterXWithinMargins) }
|
private var centerXWithinMargins: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterXWithinMargins) }
|
||||||
@available(iOS 8.0, *)
|
@available(iOS 8.0, *)
|
||||||
internal var centerYWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterYWithinMargins) }
|
private var centerYWithinMargins: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterYWithinMargins) }
|
||||||
|
|
||||||
// MARK: initializer
|
// MARK: initializer
|
||||||
|
|
||||||
|
@ -246,108 +339,69 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
|
||||||
self.toItem = ConstraintItem(object: nil, attributes: ConstraintAttributes.None)
|
self.toItem = ConstraintItem(object: nil, attributes: ConstraintAttributes.None)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: equalTo
|
|
||||||
|
|
||||||
internal func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .Equal)
|
|
||||||
}
|
|
||||||
internal func equalTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .Equal)
|
|
||||||
}
|
|
||||||
@available(iOS 7.0, *)
|
|
||||||
internal func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .Equal)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: lessThanOrEqualTo
|
|
||||||
|
|
||||||
internal func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .LessThanOrEqualTo)
|
|
||||||
}
|
|
||||||
internal func lessThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .LessThanOrEqualTo)
|
|
||||||
}
|
|
||||||
@available(iOS 7.0, *)
|
|
||||||
internal func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .LessThanOrEqualTo)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: greaterThanOrEqualTo
|
|
||||||
|
|
||||||
internal func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .GreaterThanOrEqualTo)
|
|
||||||
}
|
|
||||||
internal func greaterThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .GreaterThanOrEqualTo)
|
|
||||||
}
|
|
||||||
@available(iOS 7.0, *)
|
|
||||||
internal func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
|
||||||
return self.constrainTo(other, relation: .GreaterThanOrEqualTo)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: multiplier
|
// MARK: multiplier
|
||||||
|
|
||||||
internal func multipliedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
private func multipliedBy(amount: FloatConvertible) -> ConstraintDescription {
|
||||||
self.multiplier = amount.floatValue
|
self.multiplier = amount.floatValue
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func dividedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
private func dividedBy(amount: FloatConvertible) -> ConstraintDescription {
|
||||||
self.multiplier = 1.0 / amount.floatValue;
|
self.multiplier = 1.0 / amount.floatValue;
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: offset
|
// MARK: offset
|
||||||
|
|
||||||
internal func offset(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
private func offset(amount: FloatConvertible) -> ConstraintDescription {
|
||||||
self.constant = amount.floatValue
|
self.constant = amount.floatValue
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
internal func offset(amount: CGPoint) -> ConstraintDescriptionEditable {
|
private func offset(amount: CGPoint) -> ConstraintDescription {
|
||||||
self.constant = amount
|
self.constant = amount
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
internal func offset(amount: CGSize) -> ConstraintDescriptionEditable {
|
private func offset(amount: CGSize) -> ConstraintDescription {
|
||||||
self.constant = amount
|
self.constant = amount
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
internal func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable {
|
private func offset(amount: EdgeInsets) -> ConstraintDescription {
|
||||||
self.constant = amount
|
self.constant = amount
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: inset
|
// MARK: inset
|
||||||
|
|
||||||
internal func inset(amount: FloatConvertible) -> ConstraintDescriptionEditable {
|
private func inset(amount: FloatConvertible) -> ConstraintDescription {
|
||||||
let value = CGFloat(amount.floatValue)
|
let value = CGFloat(amount.floatValue)
|
||||||
self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value)
|
self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value)
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
internal func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable {
|
private func inset(amount: EdgeInsets) -> ConstraintDescription {
|
||||||
self.constant = EdgeInsets(top: amount.top, left: amount.left, bottom: -amount.bottom, right: -amount.right)
|
self.constant = EdgeInsets(top: amount.top, left: amount.left, bottom: -amount.bottom, right: -amount.right)
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: priority
|
// MARK: priority
|
||||||
|
|
||||||
internal func priority(priority: FloatConvertible) -> ConstraintDescriptionFinalizable {
|
private func priority(priority: FloatConvertible) -> ConstraintDescription {
|
||||||
self.priority = priority.floatValue
|
self.priority = priority.floatValue
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
internal func priorityRequired() -> ConstraintDescriptionFinalizable {
|
private func priorityRequired() -> ConstraintDescription {
|
||||||
return self.priority(1000.0)
|
return self.priority(1000.0)
|
||||||
}
|
}
|
||||||
internal func priorityHigh() -> ConstraintDescriptionFinalizable {
|
private func priorityHigh() -> ConstraintDescription {
|
||||||
return self.priority(750.0)
|
return self.priority(750.0)
|
||||||
}
|
}
|
||||||
internal func priorityMedium() -> ConstraintDescriptionFinalizable {
|
private func priorityMedium() -> ConstraintDescription {
|
||||||
#if os(iOS) || os(tvOS)
|
#if os(iOS) || os(tvOS)
|
||||||
return self.priority(500.0)
|
return self.priority(500.0)
|
||||||
#else
|
#else
|
||||||
return self.priority(501.0)
|
return self.priority(501.0)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
internal func priorityLow() -> ConstraintDescriptionFinalizable {
|
private func priorityLow() -> ConstraintDescription {
|
||||||
return self.priority(250.0)
|
return self.priority(250.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,35 +470,32 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
private func constrainTo(other: ConstraintItem, relation: ConstraintRelation) -> ConstraintDescription {
|
private func constrainTo(other: RelationTarget, relation: ConstraintRelation) -> ConstraintDescription {
|
||||||
if other.attributes != ConstraintAttributes.None {
|
if let constant = other as? FloatConvertible {
|
||||||
let toLayoutAttributes = other.attributes.layoutAttributes
|
self.constant = constant.floatValue
|
||||||
|
}
|
||||||
|
|
||||||
|
let item = other.constraintItem
|
||||||
|
|
||||||
|
if item.attributes != ConstraintAttributes.None {
|
||||||
|
let toLayoutAttributes = item.attributes.layoutAttributes
|
||||||
if toLayoutAttributes.count > 1 {
|
if toLayoutAttributes.count > 1 {
|
||||||
let fromLayoutAttributes = self.fromItem.attributes.layoutAttributes
|
let fromLayoutAttributes = self.fromItem.attributes.layoutAttributes
|
||||||
if toLayoutAttributes != fromLayoutAttributes {
|
if toLayoutAttributes != fromLayoutAttributes {
|
||||||
NSException(name: "Invalid Constraint", reason: "Cannot constrain to multiple non identical attributes", userInfo: nil).raise()
|
NSException(name: "Invalid Constraint", reason: "Cannot constrain to multiple non identical attributes", userInfo: nil).raise()
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
other.attributes = ConstraintAttributes.None
|
item.attributes = ConstraintAttributes.None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.toItem = other
|
self.toItem = item
|
||||||
self.relation = relation
|
self.relation = relation
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
private func constrainTo(other: RelationTarget, relation: ConstraintRelation) -> ConstraintDescription {
|
|
||||||
return constrainTo(other.constraintItem, relation: relation)
|
|
||||||
}
|
|
||||||
|
|
||||||
@available(iOS 7.0, *)
|
@available(iOS 7.0, *)
|
||||||
private func constrainTo(other: LayoutSupport, relation: ConstraintRelation) -> ConstraintDescription {
|
private func constrainTo(other: LayoutSupport, relation: ConstraintRelation) -> ConstraintDescription {
|
||||||
return constrainTo(ConstraintItem(object: self, attributes: ConstraintAttributes.None), relation: relation)
|
return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation, location: location)
|
||||||
}
|
|
||||||
|
|
||||||
private func constrainTo(other: FloatConvertible, relation: ConstraintRelation) -> ConstraintDescription {
|
|
||||||
self.constant = other.floatValue
|
|
||||||
return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,11 +129,11 @@ public class ConstraintMaker {
|
||||||
internal let view: View
|
internal let view: View
|
||||||
internal var constraintDescriptions = [ConstraintDescription]()
|
internal var constraintDescriptions = [ConstraintDescription]()
|
||||||
|
|
||||||
internal func makeConstraintDescription(attributes: ConstraintAttributes) -> ConstraintDescription {
|
internal func makeConstraintDescription(attributes: ConstraintAttributes) -> ConstraintDescriptionExtendable {
|
||||||
let item = ConstraintItem(object: self.view, attributes: attributes)
|
let item = ConstraintItem(object: self.view, attributes: attributes)
|
||||||
let constraintDescription = ConstraintDescription(fromItem: item)
|
let constraintDescription = ConstraintDescription(fromItem: item)
|
||||||
self.constraintDescriptions.append(constraintDescription)
|
self.constraintDescriptions.append(constraintDescription)
|
||||||
return constraintDescription
|
return ConstraintDescriptionExtendable(constraintDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class func prepareConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {
|
internal class func prepareConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {
|
||||||
|
|
Loading…
Reference in New Issue