-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathASDisplayNode+Rx.swift
More file actions
157 lines (121 loc) · 3.95 KB
/
ASDisplayNode+Rx.swift
File metadata and controls
157 lines (121 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//
// ASDisplayNode+Rx.swift
//
// Created by Geektree0101.
// Copyright © 2018 RxSwiftCommunity. All rights reserved.
//
import AsyncDisplayKit
import RxSwift
import RxCocoa
import UIKit
extension Reactive where Base: ASDisplayNode {
public var didLoad: Observable<Void> {
return self.methodInvoked(#selector(Base.didLoad))
.map { _ in return }
.asObservable()
}
public var hide: ASBinder<Bool> {
return ASBinder(self.base) { node, isHidden in
node.isHidden = isHidden
}
}
public var setNeedsLayout: Binder<Void> {
return Binder(self.base) { node, _ in
node.rx_setNeedsLayout()
}
}
}
extension Reactive where Base: ASDisplayNode {
public var didEnterPreloadState: Observable<Void> {
return self.methodInvoked(#selector(Base.didEnterPreloadState))
.map { _ in return }
.asObservable()
}
public var didEnterDisplayState: Observable<Void> {
return self.methodInvoked(#selector(Base.didEnterDisplayState))
.map { _ in return }
.asObservable()
}
public var didEnterVisibleState: Observable<Void> {
return self.methodInvoked(#selector(Base.didEnterVisibleState))
.map { _ in return }
.asObservable()
}
public var didExitVisibleState: Observable<Void> {
return self.methodInvoked(#selector(Base.didExitVisibleState))
.map { _ in return }
.asObservable()
}
public var didExitDisplayState: Observable<Void> {
return self.methodInvoked(#selector(Base.didExitDisplayState))
.map { _ in return }
.asObservable()
}
public var didExitPreloadState: Observable<Void> {
return self.methodInvoked(#selector(Base.didEnterPreloadState))
.map { _ in return }
.asObservable()
}
}
extension Reactive where Base: ASDisplayNode {
public var width: ASBinder<ASDimension> {
return ASBinder(self.base) { node, width in
node.style.width = width
}
}
public var minWidth: ASBinder<ASDimension> {
return ASBinder(self.base) { node, minWidth in
node.style.minWidth = minWidth
}
}
public var maxWidth: ASBinder<ASDimension> {
return ASBinder(self.base) { node, maxWidth in
node.style.maxWidth = maxWidth
}
}
public var height: ASBinder<ASDimension> {
return ASBinder(self.base) { node, height in
node.style.height = height
}
}
public var minHeight: ASBinder<ASDimension> {
return ASBinder(self.base) { node, minHeight in
node.style.minHeight = minHeight
}
}
public var maxHeight: ASBinder<ASDimension> {
return ASBinder(self.base) { node, maxHeight in
node.style.maxHeight = maxHeight
}
}
public var preferredSize: ASBinder<CGSize> {
return ASBinder(self.base) { node, preferredSize in
node.style.preferredSize = preferredSize
}
}
public var minSize: ASBinder<CGSize> {
return ASBinder(self.base) { node, minSize in
node.style.minSize = minSize
}
}
public var maxSize: ASBinder<CGSize> {
return ASBinder(self.base) { node, maxSize in
node.style.maxSize = maxSize
}
}
}
extension ASDisplayNode {
/**
setNeedsLayout with avoid block layout measure passing before node loaded
- important: Block layout measure passing from rx.subscribe
- returns: Void
*/
public func rx_setNeedsLayout() {
if self.isNodeLoaded {
self.setNeedsLayout()
} else {
self.layoutIfNeeded()
self.invalidateCalculatedLayout()
}
}
}