@@ -11,10 +11,6 @@ import UIKit
1111struct TZAnimationDidStopQueueEntry : Equatable {
1212 let view : UIView
1313 let hidden : Bool
14- init ( view: UIView , hidden: Bool ) {
15- self . view = view
16- self . hidden = hidden
17- }
1814}
1915
2016func == ( lhs: TZAnimationDidStopQueueEntry , rhs: TZAnimationDidStopQueueEntry ) -> Bool {
@@ -41,19 +37,15 @@ public class TZStackView: UIView {
4137
4238 public var spacing : CGFloat = 0
4339
44- public var arrangedSubviews : [ UIView ] {
45- return _arrangedSubviews
46- }
47-
4840 var layoutMarginsRelativeArrangement = false
4941
5042 private var stackViewConstraints = [ NSLayoutConstraint] ( )
5143 private var subviewConstraints = [ NSLayoutConstraint] ( )
5244
53- private var _arrangedSubviews : [ UIView ] {
45+ private( set ) var arrangedSubviews : [ UIView ] = [ ] {
5446 didSet {
5547 setNeedsUpdateConstraints ( )
56- registerHiddenListeners ( )
48+ registerHiddenListeners ( oldValue )
5749 }
5850 }
5951
@@ -66,21 +58,28 @@ public class TZStackView: UIView {
6658 private var animatingToHiddenViews = [ UIView] ( )
6759
6860 public init ( arrangedSubviews: [ UIView ] = [ ] ) {
69- self . _arrangedSubviews = arrangedSubviews
7061 super. init ( frame: CGRectZero)
71-
7262 for arrangedSubview in arrangedSubviews {
7363 arrangedSubview. setTranslatesAutoresizingMaskIntoConstraints ( false )
7464 addSubview ( arrangedSubview)
7565 }
76- registerHiddenListeners ( )
77- registerHiddenListeners ( )
66+
67+ // Closure to invoke didSet()
68+ { self . arrangedSubviews = arrangedSubviews } ( )
7869 }
7970
80- private func registerHiddenListeners( ) {
81- for arrangedSubview in arrangedSubviews {
82- removeHiddenListener ( arrangedSubview)
83- addHiddenListener ( arrangedSubview)
71+ deinit {
72+ // This removes `hidden` value KVO observers using didSet()
73+ arrangedSubviews = [ ]
74+ }
75+
76+ private func registerHiddenListeners( previousArrangedSubviews: [ UIView ] ) {
77+ previousArrangedSubviews. map { [ weak self] in
78+ self ? . removeHiddenListener ( $0)
79+ }
80+
81+ arrangedSubviews. map { [ weak self] in
82+ self ? . addHiddenListener ( $0)
8483 }
8584 }
8685
@@ -133,7 +132,7 @@ public class TZStackView: UIView {
133132 addHiddenListener ( arrangedSubview)
134133 }
135134
136- public func hiddenAnimationStopped( ) {
135+ func hiddenAnimationStopped( ) {
137136 var queueEntriesToRemove = [ TZAnimationDidStopQueueEntry] ( )
138137 for entry in animationDidStopQueueEntries {
139138 let view = entry. view
@@ -150,17 +149,19 @@ public class TZStackView: UIView {
150149 }
151150
152151 public func addArrangedSubview( view: UIView ) {
153- _arrangedSubviews. append ( view)
152+ view. setTranslatesAutoresizingMaskIntoConstraints ( false )
153+ addSubview ( view)
154+ arrangedSubviews. append ( view)
154155 }
155156
156157 public func removeArrangedSubview( view: UIView ) {
157- if let index = find ( _arrangedSubviews , view) {
158- _arrangedSubviews . removeAtIndex ( index)
158+ if let index = find ( arrangedSubviews , view) {
159+ arrangedSubviews . removeAtIndex ( index)
159160 }
160161 }
161162
162163 public func insertArrangedSubview( view: UIView , atIndex stackIndex: Int ) {
163- _arrangedSubviews . insert ( view, atIndex: stackIndex)
164+ arrangedSubviews . insert ( view, atIndex: stackIndex)
164165 }
165166
166167 override public func updateConstraints( ) {
0 commit comments