@@ -12,25 +12,27 @@ import FallingInterface
12
12
import DSKit
13
13
14
14
enum TimeState {
15
- case initial( value: Double ) // 12~13
16
- case five( value: Double ) // 10~12
17
- case four( value: Double ) // 8~10
18
- case three( value: Double ) // 6~8
19
- case two( value: Double ) // 4~6
20
- case one( value: Double ) // 2~4
21
- case zero( value: Double ) // 1~2
22
- case over( value: Double ) // 0~1
15
+ case initial( value: Double ) // 14~15
16
+ case five( value: Double ) // 12~14
17
+ case four( value: Double ) // 10~12
18
+ case three( value: Double ) // 8~10
19
+ case two( value: Double ) // 6~8
20
+ case one( value: Double ) // 4~6
21
+ case zero( value: Double ) // 2~4
22
+ case over( value: Double ) // 0~2
23
+ case none // Reject(싫어요) or Like(좋아요) or Delete(신고, 차단) user
23
24
24
25
init ( rawValue: Double ) {
25
26
switch rawValue {
26
- case 12.0 ..< 13.0 : self = . initial( value: rawValue)
27
- case 10.0 ..< 12.0 : self = . five( value: rawValue)
28
- case 8.0 ..< 10.0 : self = . four( value: rawValue)
29
- case 6.0 ..< 8.0 : self = . three( value: rawValue)
30
- case 4.0 ..< 6.0 : self = . two( value: rawValue)
31
- case 2.0 ..< 4.0 : self = . one( value: rawValue)
32
- case 1.0 ..< 2.0 : self = . zero( value: rawValue)
33
- default : self = . over( value: rawValue)
27
+ case 14.0 ..< 15.0 : self = . initial( value: rawValue)
28
+ case 12.0 ..< 14.0 : self = . five( value: rawValue)
29
+ case 10.0 ..< 12.0 : self = . four( value: rawValue)
30
+ case 8.0 ..< 10.0 : self = . three( value: rawValue)
31
+ case 6.0 ..< 8.0 : self = . two( value: rawValue)
32
+ case 4.0 ..< 6.0 : self = . one( value: rawValue)
33
+ case 2.0 ..< 4.0 : self = . zero( value: rawValue)
34
+ case 0.0 ..< 2.0 : self = . over( value: rawValue)
35
+ default : self = . none
34
36
}
35
37
}
36
38
@@ -58,43 +60,44 @@ enum TimeState {
58
60
59
61
var isDotHidden : Bool {
60
62
switch self {
61
- case . initial, . over: return true
63
+ case . initial, . over, . none : return true
62
64
default : return false
63
65
}
64
66
}
65
67
66
- var fillColor : DSKitColors {
68
+ var trackLayerStrokeColor : DSKitColors {
67
69
switch self {
68
- case . over: return DSKitAsset . Color. neutral300
70
+ case . initial , . over, . none : return DSKitAsset . Color. neutral300
69
71
default : return DSKitAsset . Color. clear
70
72
}
71
73
}
72
74
73
75
var getText : String {
74
76
switch self {
75
- case . initial, . over: return " - "
76
77
case . five: return " 5 "
77
78
case . four: return " 4 "
78
79
case . three: return " 3 "
79
80
case . two: return " 2 "
80
81
case . one: return " 1 "
81
82
case . zero: return " 0 "
83
+ default : return " - "
82
84
}
83
85
}
84
86
85
87
var getProgress : Double {
86
88
switch self {
87
89
case . initial: return 1
88
90
case . five( let value) , . four( let value) , . three( let value) , . two( let value) , . one( let value) , . zero( let value) , . over( let value) :
89
- return round ( ( value / 2 - 1 ) / 5 * 1000 ) / 1000
91
+ return round ( ( value / 2 - 2 ) / 5 * 1000 ) / 1000
92
+ default : return 0
90
93
}
91
94
}
92
95
}
93
96
94
97
final private class Timer {
95
98
private var disposable : Disposable ? = nil
96
99
97
- let currentTime = BehaviorRelay < Double > ( value: 13 .0)
100
+ let currentTime = BehaviorRelay < Double > ( value: 15 .0)
98
101
private var startTime : Double
99
102
100
103
init ( startTime: Double ) {
@@ -103,7 +106,7 @@ final private class Timer {
103
106
104
107
func start( ) {
105
108
guard disposable == nil else { return }
106
- if startTime < 0 { startTime = 13 .0 }
109
+ if startTime < 0 { startTime = 15 .0 }
107
110
108
111
disposable = Observable < Int > . interval ( . milliseconds( 10 ) ,
109
112
scheduler: MainScheduler . instance)
@@ -144,8 +147,8 @@ final class FallingUserCollectionViewCellModel: ViewModelType {
144
147
struct Output {
145
148
let user : Driver < FallingUser >
146
149
let timeState : Driver < TimeState >
147
- let timeZero : Driver < AnimationAction >
148
150
let timerActiveAction : Driver < Bool >
151
+ let timeZero : Driver < AnimationAction >
149
152
let rejectButtonAction : Driver < Void >
150
153
let likeButtonAction : Driver < Void >
151
154
let showUserInfoAction : Driver < Bool >
@@ -154,20 +157,18 @@ final class FallingUserCollectionViewCellModel: ViewModelType {
154
157
}
155
158
156
159
func transform( input: Input ) -> Output {
157
- let timer = Timer ( startTime: 13.0 )
158
- let user = Driver . just ( self . userDomain)
159
-
160
- let timerActiveTrigger = input. timerActiveTrigger
161
-
162
- let rejectButtonAction = input. rejectButtonTapTrigger
163
- . do ( onNext: { _ in
164
- timer. pause ( )
165
- timer. currentTime. accept ( - 1.0 ) // reject 시에는 0.5초 후에 넘어 가야하는 제약이 있어서, 0초로 설정하지 않았고, reject 버튼 이벤트에 대한 처리는 상위 뷰에서 따로 처리하고 있음.
166
- } )
160
+ let timer = Timer ( startTime: 15.0 )
161
+ let time = timer. currentTime. asDriver ( onErrorJustReturn: 0.0 )
162
+ let user = Driver . just ( userDomain)
167
163
168
- let likeButtonAction = input. likeButtonTapTrigger
164
+ let timeState = Driver . merge (
165
+ input. rejectButtonTapTrigger. map { TimeState . none } ,
166
+ input. likeButtonTapTrigger. map { TimeState . none } ,
167
+ input. deleteCellTrigger. map { TimeState . none } ,
168
+ time. map { TimeState ( rawValue: $0) }
169
+ )
169
170
170
- let timeActiveAction = timerActiveTrigger
171
+ let timerActiveAction = input . timerActiveTrigger
171
172
. do { value in
172
173
if !value {
173
174
timer. pause ( )
@@ -176,12 +177,17 @@ final class FallingUserCollectionViewCellModel: ViewModelType {
176
177
}
177
178
}
178
179
179
- let time = timer. currentTime. asDriver ( onErrorJustReturn: 0.0 )
180
-
181
- let timeState = time. map { TimeState ( rawValue: $0) }
182
180
let timeZero = time. filter { $0 == 0.0 } . flatMapLatest { _ in Driver . just ( AnimationAction . scroll) }
183
- let timerActiveAction = timeActiveAction. asDriver ( onErrorJustReturn:
184
- true )
181
+
182
+ let rejectButtonAction = input. rejectButtonTapTrigger
183
+ . do { _ in
184
+ timer. pause ( )
185
+ }
186
+
187
+ let likeButtonAction = input. likeButtonTapTrigger
188
+ . do { _ in
189
+ timer. pause ( )
190
+ }
185
191
186
192
let showUserInfoAction = input. showUserInfoTrigger
187
193
@@ -190,14 +196,13 @@ final class FallingUserCollectionViewCellModel: ViewModelType {
190
196
let deleteCellAction = input. deleteCellTrigger
191
197
. do ( onNext: {
192
198
timer. pause ( )
193
- timer. currentTime. accept ( - 1.0 )
194
199
} )
195
200
196
201
return Output (
197
202
user: user,
198
203
timeState: timeState,
199
- timeZero: timeZero,
200
204
timerActiveAction: timerActiveAction,
205
+ timeZero: timeZero,
201
206
rejectButtonAction: rejectButtonAction,
202
207
likeButtonAction: likeButtonAction,
203
208
showUserInfoAction: showUserInfoAction,
0 commit comments