CompositeConstraint.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //
  2. // CompositeConstraint.swift
  3. // Snappy
  4. //
  5. // Created by Jonas Budelmann on 25/07/14.
  6. // Copyright (c) 2014 Jonas Budelmann. All rights reserved.
  7. //
  8. import UIKit
  9. class CompositeConstraint: Constraint, ConstraintDelegate {
  10. var children = [Constraint]()
  11. weak var delegate: ConstraintDelegate?
  12. init(children: [Constraint]) {
  13. self.children = children
  14. for constraint in children {
  15. constraint.delegate = self
  16. }
  17. }
  18. func constraint(constraint: Constraint, shouldBeReplacedWithConstraint replacementConstraint: Constraint) {
  19. var index: Int?
  20. for (i, c) in enumerate(self.children) {
  21. if (c === constraint) {
  22. index = i
  23. }
  24. }
  25. if (index) {
  26. self.children[index!] = replacementConstraint
  27. }
  28. }
  29. func constraint(constraint: Constraint?, addConstraintWithLayoutAttribute layoutAttribute: NSLayoutAttribute) -> Constraint {
  30. var newConstraint = self.delegate!.constraint(self, addConstraintWithLayoutAttribute: layoutAttribute)
  31. newConstraint.delegate = self
  32. self.children.append(newConstraint)
  33. return newConstraint
  34. }
  35. var left: Constraint { return addConstraint(.Left) }
  36. var top: Constraint { return addConstraint(.Top) }
  37. var right: Constraint { return addConstraint(.Right) }
  38. var bottom: Constraint { return addConstraint(.Bottom) }
  39. var leading: Constraint { return addConstraint(.Leading) }
  40. var trailing: Constraint { return addConstraint(.Trailing) }
  41. var width: Constraint { return addConstraint(.Width) }
  42. var height: Constraint { return addConstraint(.Height) }
  43. var centerX: Constraint { return addConstraint(.CenterX) }
  44. var centerY: Constraint { return addConstraint(.CenterY) }
  45. var baseline: Constraint { return addConstraint(.Baseline) }
  46. var and: Constraint { return self }
  47. var with: Constraint { return self }
  48. func addConstraint(NSLayoutAttribute) -> Constraint {
  49. return self;
  50. }
  51. func equalTo(attr: Any) -> Constraint {
  52. return self
  53. }
  54. func greaterThanOrEqualTo(attr: Any) -> Constraint {
  55. return self
  56. }
  57. func lessThanOrEqualTo(attr: Any) -> Constraint {
  58. return self
  59. }
  60. func offset(offset: Any) -> Constraint {
  61. return self
  62. }
  63. func insets(insets: UIEdgeInsets) -> Constraint {
  64. return self;
  65. }
  66. func multipliedBy(multiplier: Float) -> Constraint {
  67. return self
  68. }
  69. func dividedBy(divider: Float) -> Constraint {
  70. return self
  71. }
  72. func priority(priority: UILayoutPriority) -> Constraint {
  73. return self
  74. }
  75. func priorityLow() -> Constraint {
  76. return self
  77. }
  78. func priorityMedium() -> Constraint {
  79. return self
  80. }
  81. func priorityHigh() -> Constraint {
  82. return self
  83. }
  84. func install() {
  85. }
  86. }