@@ -97,7 +97,6 @@ |
||
97 | 97 |
0513102521CA1B67004EF1BE /* NetworkApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0505B34F1F7E4B9A009E4ED2 /* NetworkApi.swift */; }; |
98 | 98 |
0513102621CA1B67004EF1BE /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0505B34B1F7E4024009E4ED2 /* Resource.swift */; }; |
99 | 99 |
0513102821CA1B67004EF1BE /* NetWorkCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A69FFA811E7002B50006FEE0 /* NetWorkCache.swift */; }; |
100 |
- 0513102921CA1B67004EF1BE /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0594845921B66DA500074EFC /* Result.swift */; }; |
|
101 | 100 |
0513102B21CA1B67004EF1BE /* HomeRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = A69FFAD61E70047E0006FEE0 /* HomeRepository.swift */; }; |
102 | 101 |
0513102C21CA1B67004EF1BE /* OrderRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = A69FFAED1E70047E0006FEE0 /* OrderRepository.swift */; }; |
103 | 102 |
0513102D21CA1B67004EF1BE /* GroupPhotoRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0540C8B01F8C9A640044FCC5 /* GroupPhotoRepository.swift */; }; |
@@ -138,14 +137,10 @@ |
||
138 | 137 |
0513106721CA290B004EF1BE /* DateExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543274721C68C1900C6388D /* DateExt.swift */; }; |
139 | 138 |
0513106921CA34D6004EF1BE /* GroupDetailCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */; }; |
140 | 139 |
0513106B21CA3545004EF1BE /* PhotoDetailCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */; }; |
141 |
- 0513107C21CA3907004EF1BE /* FFAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106D21CA3907004EF1BE /* FFAlertController.swift */; }; |
|
142 | 140 |
0513107D21CA3907004EF1BE /* CancelAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106F21CA3907004EF1BE /* CancelAlertAction.swift */; }; |
143 |
- 0513107E21CA3907004EF1BE /* FFAlertControllerRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107021CA3907004EF1BE /* FFAlertControllerRepresentable.swift */; }; |
|
144 | 141 |
0513107F21CA3907004EF1BE /* DestructiveAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */; }; |
145 | 142 |
0513108021CA3907004EF1BE /* ActionSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107221CA3907004EF1BE /* ActionSheetView.swift */; }; |
146 | 143 |
0513108121CA3907004EF1BE /* ConfirmAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */; }; |
147 |
- 0513108221CA3907004EF1BE /* FFSheetActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107421CA3907004EF1BE /* FFSheetActionCell.swift */; }; |
|
148 |
- 0513108321CA3907004EF1BE /* FFAlertLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107521CA3907004EF1BE /* FFAlertLabel.swift */; }; |
|
149 | 144 |
0513109321CA3915004EF1BE /* ColorQR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108A21CA3914004EF1BE /* ColorQR.swift */; }; |
150 | 145 |
0513109421CA3915004EF1BE /* QRCodeMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108B21CA3914004EF1BE /* QRCodeMaskView.swift */; }; |
151 | 146 |
0513109521CA3915004EF1BE /* QRCodeScanDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108C21CA3914004EF1BE /* QRCodeScanDelegate.swift */; }; |
@@ -166,7 +161,6 @@ |
||
166 | 161 |
051310B621CB675A004EF1BE /* UIImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543276621C68C3300C6388D /* UIImageView+Kingfisher.swift */; }; |
167 | 162 |
051310B821CB6958004EF1BE /* UserInfoStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051310B721CB6958004EF1BE /* UserInfoStore.swift */; }; |
168 | 163 |
051310C021CB6EF4004EF1BE /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051310BF21CB6EF4004EF1BE /* UserInfo.swift */; }; |
169 |
- 0521145421F083F20047C55A /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0521145321F083F20047C55A /* ToastView.swift */; }; |
|
170 | 164 |
052BF1C821E344020010D270 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 052BF1C721E344020010D270 /* PullToRefresh.framework */; }; |
171 | 165 |
052BF1C921E344280010D270 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 052BF1C721E344020010D270 /* PullToRefresh.framework */; }; |
172 | 166 |
0530951B221AB3EC00408D34 /* GroupDetailMemeberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0530951A221AB3EC00408D34 /* GroupDetailMemeberView.swift */; }; |
@@ -174,11 +168,7 @@ |
||
174 | 168 |
0535D6DB21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0535D6DA21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift */; }; |
175 | 169 |
053E126521F1718E00A64893 /* PageOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126421F1718E00A64893 /* PageOption.swift */; }; |
176 | 170 |
053E126721F1719F00A64893 /* PageItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126621F1719F00A64893 /* PageItem.swift */; }; |
177 |
- 053E126921F171C500A64893 /* ToastOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126821F171C500A64893 /* ToastOption.swift */; }; |
|
178 |
- 053E126B21F5696E00A64893 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126A21F5696E00A64893 /* Toast.swift */; }; |
|
179 |
- 053E126D21F5767300A64893 /* ToastAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126C21F5767300A64893 /* ToastAnimator.swift */; }; |
|
180 |
- 053E126F21F5774700A64893 /* FadeToastAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126E21F5774700A64893 /* FadeToastAnimator.swift */; }; |
|
181 |
- 053E127521F5A72000A64893 /* DataError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E127421F5A72000A64893 /* DataError.swift */; }; |
|
171 |
+ 053E127521F5A72000A64893 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E127421F5A72000A64893 /* Error.swift */; }; |
|
182 | 172 |
053E127821F5B6E400A64893 /* AlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E127721F5B6E400A64893 /* AlertController.swift */; }; |
183 | 173 |
0543E7F421CB911200A42807 /* UserInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543E7F321CB911200A42807 /* UserInfoViewModel.swift */; }; |
184 | 174 |
0543E80721D0CDFA00A42807 /* MineFeedbackViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543E80621D0CDFA00A42807 /* MineFeedbackViewModel.swift */; }; |
@@ -186,7 +176,6 @@ |
||
186 | 176 |
0543E80D21D1E2EA00A42807 /* PhotoGroupDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543E80C21D1E2EA00A42807 /* PhotoGroupDetailRepository.swift */; }; |
187 | 177 |
0543E80F21D1FD1100A42807 /* GroupDetailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543E80E21D1FD1100A42807 /* GroupDetailItem.swift */; }; |
188 | 178 |
0546D9852242460700742939 /* OriginData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0546D9842242460700742939 /* OriginData.swift */; }; |
189 |
- 0546D98E2243782300742939 /* ShareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0546D98D2243782300742939 /* ShareView.swift */; }; |
|
190 | 179 |
054B6C45223F884600939FE6 /* PhotoDetailRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 054B6C44223F884600939FE6 /* PhotoDetailRemoteAPI.swift */; }; |
191 | 180 |
054B6C46223F966A00939FE6 /* RxDataSources.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC421CA1997004EF1BE /* RxDataSources.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
192 | 181 |
05594BFF2240BEDE002D4910 /* PhotoDetailListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05594BFE2240BEDE002D4910 /* PhotoDetailListViewModel.swift */; }; |
@@ -217,6 +206,12 @@ |
||
217 | 206 |
0584FD7721F9C8A300FA1E3E /* PresentAnimatorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7621F9C8A300FA1E3E /* PresentAnimatorDelegate.swift */; }; |
218 | 207 |
0584FD7C21FABC1400FA1E3E /* PresentExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7B21FABC1400FA1E3E /* PresentExtension.swift */; }; |
219 | 208 |
0584FD7E21FABD9D00FA1E3E /* PresentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7D21FABD9D00FA1E3E /* PresentViewController.swift */; }; |
209 |
+ 058D0C9D2249C94F006CA488 /* CoordinatorKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 058D0C9C2249C94F006CA488 /* CoordinatorKey.swift */; }; |
|
210 |
+ 058D0CA02249FCF6006CA488 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126A21F5696E00A64893 /* Toast.swift */; }; |
|
211 |
+ 058D0CA12249FCF6006CA488 /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0521145321F083F20047C55A /* ToastView.swift */; }; |
|
212 |
+ 058D0CA22249FCF6006CA488 /* ToastOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126821F171C500A64893 /* ToastOption.swift */; }; |
|
213 |
+ 058D0CA32249FCF6006CA488 /* ToastAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126C21F5767300A64893 /* ToastAnimator.swift */; }; |
|
214 |
+ 058D0CA42249FCF6006CA488 /* FadeToastAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126E21F5774700A64893 /* FadeToastAnimator.swift */; }; |
|
220 | 215 |
059B589F21F7103100FA64C2 /* AlertItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B589E21F7103100FA64C2 /* AlertItem.swift */; }; |
221 | 216 |
059B58A621F7235D00FA64C2 /* AlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B58A521F7235D00FA64C2 /* AlertAction.swift */; }; |
222 | 217 |
059B58A821F83B1600FA64C2 /* CenterCancelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B58A721F83B1600FA64C2 /* CenterCancelItem.swift */; }; |
@@ -370,14 +365,10 @@ |
||
370 | 365 |
0513106121CA22B5004EF1BE /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; }; |
371 | 366 |
0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailCoordinator.swift; sourceTree = "<group>"; }; |
372 | 367 |
0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDetailCoordinator.swift; sourceTree = "<group>"; }; |
373 |
- 0513106D21CA3907004EF1BE /* FFAlertController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FFAlertController.swift; sourceTree = "<group>"; }; |
|
374 | 368 |
0513106F21CA3907004EF1BE /* CancelAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CancelAlertAction.swift; sourceTree = "<group>"; }; |
375 |
- 0513107021CA3907004EF1BE /* FFAlertControllerRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FFAlertControllerRepresentable.swift; sourceTree = "<group>"; }; |
|
376 | 369 |
0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DestructiveAlertAction.swift; sourceTree = "<group>"; }; |
377 | 370 |
0513107221CA3907004EF1BE /* ActionSheetView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetView.swift; sourceTree = "<group>"; }; |
378 | 371 |
0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfirmAlertAction.swift; sourceTree = "<group>"; }; |
379 |
- 0513107421CA3907004EF1BE /* FFSheetActionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FFSheetActionCell.swift; sourceTree = "<group>"; }; |
|
380 |
- 0513107521CA3907004EF1BE /* FFAlertLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FFAlertLabel.swift; sourceTree = "<group>"; }; |
|
381 | 372 |
0513108A21CA3914004EF1BE /* ColorQR.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorQR.swift; sourceTree = "<group>"; }; |
382 | 373 |
0513108B21CA3914004EF1BE /* QRCodeMaskView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeMaskView.swift; sourceTree = "<group>"; }; |
383 | 374 |
0513108C21CA3914004EF1BE /* QRCodeScanDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeScanDelegate.swift; sourceTree = "<group>"; }; |
@@ -403,7 +394,7 @@ |
||
403 | 394 |
053E126A21F5696E00A64893 /* Toast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = "<group>"; }; |
404 | 395 |
053E126C21F5767300A64893 /* ToastAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastAnimator.swift; sourceTree = "<group>"; }; |
405 | 396 |
053E126E21F5774700A64893 /* FadeToastAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FadeToastAnimator.swift; sourceTree = "<group>"; }; |
406 |
- 053E127421F5A72000A64893 /* DataError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataError.swift; sourceTree = "<group>"; }; |
|
397 |
+ 053E127421F5A72000A64893 /* Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; }; |
|
407 | 398 |
053E127721F5B6E400A64893 /* AlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertController.swift; sourceTree = "<group>"; }; |
408 | 399 |
0540C8B01F8C9A640044FCC5 /* GroupPhotoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupPhotoRepository.swift; sourceTree = "<group>"; }; |
409 | 400 |
0540C8B21F8CA07E0044FCC5 /* FileModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileModel.swift; sourceTree = "<group>"; }; |
@@ -428,7 +419,6 @@ |
||
428 | 419 |
0543E80E21D1FD1100A42807 /* GroupDetailItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailItem.swift; sourceTree = "<group>"; }; |
429 | 420 |
05468AF11F8B73A000B8F469 /* PhotoItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoItem.swift; sourceTree = "<group>"; }; |
430 | 421 |
0546D9842242460700742939 /* OriginData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OriginData.swift; sourceTree = "<group>"; }; |
431 |
- 0546D98D2243782300742939 /* ShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareView.swift; sourceTree = "<group>"; }; |
|
432 | 422 |
054863661FA326CB00A39DA0 /* PhotoCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoCell.swift; sourceTree = "<group>"; }; |
433 | 423 |
054863671FA326CB00A39DA0 /* PhotoCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhotoCell.xib; sourceTree = "<group>"; }; |
434 | 424 |
054B6C44223F884600939FE6 /* PhotoDetailRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDetailRemoteAPI.swift; sourceTree = "<group>"; }; |
@@ -459,8 +449,8 @@ |
||
459 | 449 |
0584FD7621F9C8A300FA1E3E /* PresentAnimatorDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentAnimatorDelegate.swift; sourceTree = "<group>"; }; |
460 | 450 |
0584FD7B21FABC1400FA1E3E /* PresentExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentExtension.swift; sourceTree = "<group>"; }; |
461 | 451 |
0584FD7D21FABD9D00FA1E3E /* PresentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentViewController.swift; sourceTree = "<group>"; }; |
452 |
+ 058D0C9C2249C94F006CA488 /* CoordinatorKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoordinatorKey.swift; sourceTree = "<group>"; }; |
|
462 | 453 |
0594845721B528FE00074EFC /* Interfaces.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Interfaces.swift; sourceTree = "<group>"; }; |
463 |
- 0594845921B66DA500074EFC /* Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = "<group>"; }; |
|
464 | 454 |
059AA5D921BA1A2000485188 /* MessageCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCoordinator.swift; sourceTree = "<group>"; }; |
465 | 455 |
059AA62821BA855000485188 /* MessageRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageRepository.swift; sourceTree = "<group>"; }; |
466 | 456 |
059AA62A21BA85B000485188 /* MessageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageViewModel.swift; sourceTree = "<group>"; }; |
@@ -662,11 +652,9 @@ |
||
662 | 652 |
children = ( |
663 | 653 |
055BB53F220AEA4E009548AA /* Nibless */, |
664 | 654 |
0584FD7A21FABA0300FA1E3E /* Present */, |
665 |
- 0521145521F083FA0047C55A /* Toast */, |
|
666 | 655 |
05C8D21E21EDD5A80001E847 /* NavigationBar */, |
667 | 656 |
05C8D21721ED911D0001E847 /* NavigationBack */, |
668 | 657 |
0513108921CA3914004EF1BE /* QR */, |
669 |
- 0513106C21CA3907004EF1BE /* Alert */, |
|
670 | 658 |
05130F4E21C94C12004EF1BE /* AlertViewController */, |
671 | 659 |
05130F6121C94C79004EF1BE /* PageViewController */, |
672 | 660 |
05130F5F21C94C79004EF1BE /* SideViewController */, |
@@ -806,6 +794,7 @@ |
||
806 | 794 |
05130FBA21C9EE82004EF1BE /* App */ = { |
807 | 795 |
isa = PBXGroup; |
808 | 796 |
children = ( |
797 |
+ 058D0C9C2249C94F006CA488 /* CoordinatorKey.swift */, |
|
809 | 798 |
050E210F21B8CE8A008E1352 /* AppCoordinator.swift */, |
810 | 799 |
05087F6721B8F9530024A117 /* ContainerViewController.swift */, |
811 | 800 |
A69FFA791E7002970006FEE0 /* LoginViewController.swift */, |
@@ -820,25 +809,6 @@ |
||
820 | 809 |
path = App; |
821 | 810 |
sourceTree = "<group>"; |
822 | 811 |
}; |
823 |
- 0513106C21CA3907004EF1BE /* Alert */ = { |
|
824 |
- isa = PBXGroup; |
|
825 |
- children = ( |
|
826 |
- 0513106D21CA3907004EF1BE /* FFAlertController.swift */, |
|
827 |
- 0513106E21CA3907004EF1BE /* Views */, |
|
828 |
- ); |
|
829 |
- path = Alert; |
|
830 |
- sourceTree = "<group>"; |
|
831 |
- }; |
|
832 |
- 0513106E21CA3907004EF1BE /* Views */ = { |
|
833 |
- isa = PBXGroup; |
|
834 |
- children = ( |
|
835 |
- 0513107021CA3907004EF1BE /* FFAlertControllerRepresentable.swift */, |
|
836 |
- 0513107421CA3907004EF1BE /* FFSheetActionCell.swift */, |
|
837 |
- 0513107521CA3907004EF1BE /* FFAlertLabel.swift */, |
|
838 |
- ); |
|
839 |
- path = Views; |
|
840 |
- sourceTree = "<group>"; |
|
841 |
- }; |
|
842 | 812 |
0513108921CA3914004EF1BE /* QR */ = { |
843 | 813 |
isa = PBXGroup; |
844 | 814 |
children = ( |
@@ -895,8 +865,9 @@ |
||
895 | 865 |
053E127221F5A6D400A64893 /* Resuable */ = { |
896 | 866 |
isa = PBXGroup; |
897 | 867 |
children = ( |
868 |
+ 0521145521F083FA0047C55A /* Toast */, |
|
898 | 869 |
053E127321F5A6E200A64893 /* Extension */, |
899 |
- 053E127421F5A72000A64893 /* DataError.swift */, |
|
870 |
+ 053E127421F5A72000A64893 /* Error.swift */, |
|
900 | 871 |
); |
901 | 872 |
path = Resuable; |
902 | 873 |
sourceTree = "<group>"; |
@@ -1212,7 +1183,6 @@ |
||
1212 | 1183 |
A69FFA9E1E7004700006FEE0 /* PhotoDetailCommentCell.swift */, |
1213 | 1184 |
05594C022240E94E002D4910 /* PhotoDetailImageCell.swift */, |
1214 | 1185 |
A69FFAA61E7004700006FEE0 /* ImageCell.swift */, |
1215 |
- 0546D98D2243782300742939 /* ShareView.swift */, |
|
1216 | 1186 |
A69FFAA81E7004700006FEE0 /* ShareController.swift */, |
1217 | 1187 |
A69FFAA91E7004700006FEE0 /* PhotoPreviewViewController.swift */, |
1218 | 1188 |
A69FFB881E7018CC0006FEE0 /* PhotoDetail.storyboard */, |
@@ -1346,7 +1316,6 @@ |
||
1346 | 1316 |
children = ( |
1347 | 1317 |
0505B34F1F7E4B9A009E4ED2 /* NetworkApi.swift */, |
1348 | 1318 |
0505B34B1F7E4024009E4ED2 /* Resource.swift */, |
1349 |
- 0594845921B66DA500074EFC /* Result.swift */, |
|
1350 | 1319 |
0594845721B528FE00074EFC /* Interfaces.swift */, |
1351 | 1320 |
A69FFA811E7002B50006FEE0 /* NetWorkCache.swift */, |
1352 | 1321 |
); |
@@ -1626,7 +1595,6 @@ |
||
1626 | 1595 |
05C8D22421EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift in Sources */, |
1627 | 1596 |
05130FFD21CA1B39004EF1BE /* HardwareAuthorization.swift in Sources */, |
1628 | 1597 |
0513107D21CA3907004EF1BE /* CancelAlertAction.swift in Sources */, |
1629 |
- 053E126F21F5774700A64893 /* FadeToastAnimator.swift in Sources */, |
|
1630 | 1598 |
05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */, |
1631 | 1599 |
05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */, |
1632 | 1600 |
055BB53E220AEA3B009548AA /* NiblessViewController.swift in Sources */, |
@@ -1638,20 +1606,16 @@ |
||
1638 | 1606 |
0513100121CA1B39004EF1BE /* CGPointExt.swift in Sources */, |
1639 | 1607 |
0584FD7521F9C70D00FA1E3E /* SideAnimator.swift in Sources */, |
1640 | 1608 |
0584FD7721F9C8A300FA1E3E /* PresentAnimatorDelegate.swift in Sources */, |
1641 |
- 0513108321CA3907004EF1BE /* FFAlertLabel.swift in Sources */, |
|
1642 | 1609 |
0513107F21CA3907004EF1BE /* DestructiveAlertAction.swift in Sources */, |
1643 | 1610 |
059B589F21F7103100FA64C2 /* AlertItem.swift in Sources */, |
1644 | 1611 |
059B58A621F7235D00FA64C2 /* AlertAction.swift in Sources */, |
1645 | 1612 |
0513109821CA3915004EF1BE /* QRCodeScanResult.swift in Sources */, |
1646 | 1613 |
0513100221CA1B39004EF1BE /* CGSizeExt.swift in Sources */, |
1647 |
- 053E126921F171C500A64893 /* ToastOption.swift in Sources */, |
|
1648 | 1614 |
0513108121CA3907004EF1BE /* ConfirmAlertAction.swift in Sources */, |
1649 |
- 0513108221CA3907004EF1BE /* FFSheetActionCell.swift in Sources */, |
|
1650 | 1615 |
05C8D22221EED6860001E847 /* NavigationBarInteractiveViewController.swift in Sources */, |
1651 | 1616 |
0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */, |
1652 | 1617 |
0513100721CA1B39004EF1BE /* UIViewController+UIBarButtonItem.swift in Sources */, |
1653 | 1618 |
05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */, |
1654 |
- 053E126B21F5696E00A64893 /* Toast.swift in Sources */, |
|
1655 | 1619 |
0500C26521E8644E009A7013 /* NavigationBackDelegate.swift in Sources */, |
1656 | 1620 |
057317A221F5C6A0009B2FCE /* BottomDefaultItem.swift in Sources */, |
1657 | 1621 |
0513106021CA1E53004EF1BE /* UIStoryboardExt.swift in Sources */, |
@@ -1684,7 +1648,6 @@ |
||
1684 | 1648 |
05C8D21921ED985C0001E847 /* UINavigationController+NavigationBack.swift in Sources */, |
1685 | 1649 |
05D3A3C821FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift in Sources */, |
1686 | 1650 |
05130F5A21C94C12004EF1BE /* PresentDisappearAnimatedTransitioning.swift in Sources */, |
1687 |
- 053E126D21F5767300A64893 /* ToastAnimator.swift in Sources */, |
|
1688 | 1651 |
053E126721F1719F00A64893 /* PageItem.swift in Sources */, |
1689 | 1652 |
053E127821F5B6E400A64893 /* AlertController.swift in Sources */, |
1690 | 1653 |
05C5285621FE98F50090ECB5 /* GestureRecognizerProxy.swift in Sources */, |
@@ -1692,15 +1655,12 @@ |
||
1692 | 1655 |
0513109421CA3915004EF1BE /* QRCodeMaskView.swift in Sources */, |
1693 | 1656 |
0513109721CA3915004EF1BE /* QRCodeScanner.swift in Sources */, |
1694 | 1657 |
05130F5E21C94C12004EF1BE /* PresentAppearAnimatedTransitioning.swift in Sources */, |
1695 |
- 0513107C21CA3907004EF1BE /* FFAlertController.swift in Sources */, |
|
1696 | 1658 |
05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */, |
1697 | 1659 |
0513109321CA3915004EF1BE /* ColorQR.swift in Sources */, |
1698 | 1660 |
0569F61822014B24000A75CA /* NavigationBarDelegate.swift in Sources */, |
1699 | 1661 |
05130F5C21C94C12004EF1BE /* ActionSheetAnimator.swift in Sources */, |
1700 | 1662 |
05130F5B21C94C12004EF1BE /* PresentAnimatable.swift in Sources */, |
1701 |
- 0513107E21CA3907004EF1BE /* FFAlertControllerRepresentable.swift in Sources */, |
|
1702 | 1663 |
05C8D22B21EF0EDC0001E847 /* NavigationControllerDelegate.swift in Sources */, |
1703 |
- 0521145421F083F20047C55A /* ToastView.swift in Sources */, |
|
1704 | 1664 |
05C5285821FE995F0090ECB5 /* GestureRecognizerDelegate.swift in Sources */, |
1705 | 1665 |
05130F6321C94C7A004EF1BE /* SideViewController.swift in Sources */, |
1706 | 1666 |
05130F6421C94C7A004EF1BE /* PageViewController.swift in Sources */, |
@@ -1711,6 +1671,11 @@ |
||
1711 | 1671 |
isa = PBXSourcesBuildPhase; |
1712 | 1672 |
buildActionMask = 2147483647; |
1713 | 1673 |
files = ( |
1674 |
+ 058D0CA02249FCF6006CA488 /* Toast.swift in Sources */, |
|
1675 |
+ 058D0CA12249FCF6006CA488 /* ToastView.swift in Sources */, |
|
1676 |
+ 058D0CA22249FCF6006CA488 /* ToastOption.swift in Sources */, |
|
1677 |
+ 058D0CA32249FCF6006CA488 /* ToastAnimator.swift in Sources */, |
|
1678 |
+ 058D0CA42249FCF6006CA488 /* FadeToastAnimator.swift in Sources */, |
|
1714 | 1679 |
0513106521CA290B004EF1BE /* UserDefaultsExt.swift in Sources */, |
1715 | 1680 |
0513106621CA290B004EF1BE /* StringExt.swift in Sources */, |
1716 | 1681 |
0543E7F421CB911200A42807 /* UserInfoViewModel.swift in Sources */, |
@@ -1730,7 +1695,6 @@ |
||
1730 | 1695 |
0535D6DB21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift in Sources */, |
1731 | 1696 |
05B2C63121D75A1B008063B3 /* ContentResource.swift in Sources */, |
1732 | 1697 |
057CA9CA21DCA70B00FB7D03 /* GroupRepository.swift in Sources */, |
1733 |
- 0513102921CA1B67004EF1BE /* Result.swift in Sources */, |
|
1734 | 1698 |
05C0D9A421D28591000B7B2A /* UserInfoRemoteAPI.swift in Sources */, |
1735 | 1699 |
0513102B21CA1B67004EF1BE /* HomeRepository.swift in Sources */, |
1736 | 1700 |
0535D6D921D32A89008D9403 /* WXUserInfoRemoteAPI.swift in Sources */, |
@@ -1763,7 +1727,7 @@ |
||
1763 | 1727 |
0513103F21CA1B67004EF1BE /* PhotoDetailViewModel.swift in Sources */, |
1764 | 1728 |
054B6C45223F884600939FE6 /* PhotoDetailRemoteAPI.swift in Sources */, |
1765 | 1729 |
0513104021CA1B67004EF1BE /* MessageListViewModel.swift in Sources */, |
1766 |
- 053E127521F5A72000A64893 /* DataError.swift in Sources */, |
|
1730 |
+ 053E127521F5A72000A64893 /* Error.swift in Sources */, |
|
1767 | 1731 |
05B2C61D21D710C5008063B3 /* GroupRemoteAPI.swift in Sources */, |
1768 | 1732 |
0513104121CA1B67004EF1BE /* MessageViewModel.swift in Sources */, |
1769 | 1733 |
0513104221CA1B67004EF1BE /* CreateGroupViewModel.swift in Sources */, |
@@ -1785,7 +1749,6 @@ |
||
1785 | 1749 |
isa = PBXSourcesBuildPhase; |
1786 | 1750 |
buildActionMask = 2147483647; |
1787 | 1751 |
files = ( |
1788 |
- 0546D98E2243782300742939 /* ShareView.swift in Sources */, |
|
1789 | 1752 |
051310B621CB675A004EF1BE /* UIImageView+Kingfisher.swift in Sources */, |
1790 | 1753 |
05130FDD21CA1B04004EF1BE /* GroupViewController.swift in Sources */, |
1791 | 1754 |
05130FDF21CA1B04004EF1BE /* GroupMemberCell.swift in Sources */, |
@@ -1811,6 +1774,7 @@ |
||
1811 | 1774 |
05130FF021CA1B04004EF1BE /* MineOrderViewController.swift in Sources */, |
1812 | 1775 |
05130FF121CA1B04004EF1BE /* MineAboutViewController.swift in Sources */, |
1813 | 1776 |
05130FF721CA1B04004EF1BE /* PhotoDetailCommentCell.swift in Sources */, |
1777 |
+ 058D0C9D2249C94F006CA488 /* CoordinatorKey.swift in Sources */, |
|
1814 | 1778 |
0513106B21CA3545004EF1BE /* PhotoDetailCoordinator.swift in Sources */, |
1815 | 1779 |
05130FF821CA1B04004EF1BE /* ImageCell.swift in Sources */, |
1816 | 1780 |
05130FF921CA1B04004EF1BE /* PhotoDetailViewController.swift in Sources */, |
@@ -0,0 +1,21 @@ |
||
1 |
+{ |
|
2 |
+ "images" : [ |
|
3 |
+ { |
|
4 |
+ "idiom" : "universal", |
|
5 |
+ "scale" : "1x" |
|
6 |
+ }, |
|
7 |
+ { |
|
8 |
+ "idiom" : "universal", |
|
9 |
+ "scale" : "2x" |
|
10 |
+ }, |
|
11 |
+ { |
|
12 |
+ "idiom" : "universal", |
|
13 |
+ "filename" : "Logo@3x.png", |
|
14 |
+ "scale" : "3x" |
|
15 |
+ } |
|
16 |
+ ], |
|
17 |
+ "info" : { |
|
18 |
+ "version" : 1, |
|
19 |
+ "author" : "xcode" |
|
20 |
+ } |
|
21 |
+} |
@@ -1,21 +0,0 @@ |
||
1 |
-{ |
|
2 |
- "images" : [ |
|
3 |
- { |
|
4 |
- "idiom" : "universal", |
|
5 |
- "scale" : "1x" |
|
6 |
- }, |
|
7 |
- { |
|
8 |
- "idiom" : "universal", |
|
9 |
- "scale" : "2x" |
|
10 |
- }, |
|
11 |
- { |
|
12 |
- "idiom" : "universal", |
|
13 |
- "filename" : "FEED_λ_@3x.png", |
|
14 |
- "scale" : "3x" |
|
15 |
- } |
|
16 |
- ], |
|
17 |
- "info" : { |
|
18 |
- "version" : 1, |
|
19 |
- "author" : "xcode" |
|
20 |
- } |
|
21 |
-} |
@@ -32,7 +32,7 @@ struct GroupRemoteAPI { |
||
32 | 32 |
|
33 | 33 |
func loadContent(page: Int) -> Single<NetworkArrayData<GroupItem>> { |
34 | 34 |
let resource = ContentResource<NetworkArrayData<GroupItem>>(path: .groupList, |
35 |
- parameter: ["user_id": ShareUserId, "page": page], |
|
35 |
+ parameter: ["user_id": ShareUserId, "page": page, "num": 20], |
|
36 | 36 |
parseJSON: parse) |
37 | 37 |
return resource.loadContent() |
38 | 38 |
} |
@@ -31,7 +31,7 @@ struct MessageRemoteAPI { |
||
31 | 31 |
|
32 | 32 |
func loadMessageList(_ type: MessageType, page: Int) -> Single<NetworkArrayData<MessageListItem>> { |
33 | 33 |
let resource = ContentResource<NetworkArrayData<MessageListItem>>(path: type.model.path, |
34 |
- parameter: ["user_id": ShareUserId, "page": page], |
|
34 |
+ parameter: ["user_id": ShareUserId, "page": page, "num": 20], |
|
35 | 35 |
parseJSON: parseMessageList) |
36 | 36 |
return resource.loadContent() |
37 | 37 |
} |
@@ -18,7 +18,8 @@ struct OrderRemoteAPI { |
||
18 | 18 |
|
19 | 19 |
func loadContent(page: Int) -> Single<NetworkArrayData<OrderItem>> { |
20 | 20 |
let resource = ContentResource<NetworkArrayData<OrderItem>>(path: .orderList, |
21 |
- parameter: ["user_id": ShareUserId, "page": page], |
|
21 |
+ parameter: ["user_id": ShareUserId, |
|
22 |
+ "page": page, "num": 20], |
|
22 | 23 |
parseJSON: parse) |
23 | 24 |
return resource.loadContent() |
24 | 25 |
} |
@@ -6,14 +6,10 @@ |
||
6 | 6 |
// Copyright © 2017年 yb. All rights reserved. |
7 | 7 |
// |
8 | 8 |
|
9 |
-import Foundation |
|
9 |
+import UIKit |
|
10 | 10 |
import Alamofire |
11 | 11 |
import RxSwift |
12 | 12 |
|
13 |
-struct ParseError: Error {} |
|
14 |
- |
|
15 |
-//public typealias Request = Parsable & Resource |
|
16 |
- |
|
17 | 13 |
class NetworkApi { |
18 | 14 |
|
19 | 15 |
public static let share = NetworkApi() |
@@ -83,13 +79,15 @@ class NetworkApi { |
||
83 | 79 |
guard let json = json as? [String: AnyObject], |
84 | 80 |
let status = json["status"] as? Int, |
85 | 81 |
let data = resource.parse(json) else { |
82 |
+ Toast.show(message: "解析失败") |
|
86 | 83 |
observer(.error(ParseError())) |
87 | 84 |
return |
88 | 85 |
} |
89 | 86 |
if status == 200 { |
90 | 87 |
observer(.success(data)) |
91 | 88 |
} else { |
92 |
- observer(.error(InteractionError(id: status, errMessage: ""))) |
|
89 |
+ Toast.show(message: (json["description"] as? String) ?? "") |
|
90 |
+ observer(.error(BusinessError(id: status))) |
|
93 | 91 |
} |
94 | 92 |
|
95 | 93 |
case .failure(let error): |
@@ -1,42 +0,0 @@ |
||
1 |
-// |
|
2 |
-// Result.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by ffib on 2018/12/4. |
|
6 |
-// Copyright © 2018 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import Foundation |
|
10 |
- |
|
11 |
-enum Result<A> { |
|
12 |
- case error(Error) |
|
13 |
- case success(A) |
|
14 |
- |
|
15 |
- init(_ value: A?, or: @autoclosure () -> Error) { |
|
16 |
- if let x = value { self = .success(x) } |
|
17 |
- else { self = .error(or()) } |
|
18 |
- } |
|
19 |
- |
|
20 |
- func map<B>(_ f: (A) -> B) -> Result<B> { |
|
21 |
- switch self { |
|
22 |
- case .error(let e): return .error(e) |
|
23 |
- case .success(let x): return .success(f(x)) |
|
24 |
- } |
|
25 |
- } |
|
26 |
- |
|
27 |
- func flatMap<B>(_ f: (A) -> Result<B>) -> Result<B> { |
|
28 |
- switch self { |
|
29 |
- case .error(let e): return .error(e) |
|
30 |
- case .success(let x): return f(x) |
|
31 |
- } |
|
32 |
- } |
|
33 |
- |
|
34 |
- func flatMap<B>(_ f: (A) -> B?, or e: Error) -> Result<B> { |
|
35 |
- switch self { |
|
36 |
- case .error(let e): return .error(e) |
|
37 |
- case .success(let x): |
|
38 |
- if let value = f(x) { return .success(value) } |
|
39 |
- return .error(e) |
|
40 |
- } |
|
41 |
- } |
|
42 |
-} |
@@ -25,12 +25,6 @@ struct StatusResource: Resource { |
||
25 | 25 |
} |
26 | 26 |
|
27 | 27 |
func getStatus() -> Completable { |
28 |
- return NetworkApi.share.post(resource: self).flatMapCompletable({ (model) -> Completable in |
|
29 |
- if model.status == 200 { |
|
30 |
- return Completable.empty() |
|
31 |
- } else { |
|
32 |
- return Completable.error(InteractionError(id: model.status, errMessage: model.description)) |
|
33 |
- } |
|
34 |
- }) |
|
28 |
+ return NetworkApi.share.post(resource: self).asCompletable() |
|
35 | 29 |
} |
36 | 30 |
} |
@@ -28,6 +28,8 @@ public class MessageListViewModel { |
||
28 | 28 |
private var _showMessage = PublishSubject<String>() |
29 | 29 |
private var items = BehaviorRelay<[MessageListItem]>(value: []) |
30 | 30 |
|
31 |
+ public var messageReaded = BehaviorRelay<Bool>(value: false) |
|
32 |
+ |
|
31 | 33 |
public weak var delegate: MessageListViewModelDelegate? |
32 | 34 |
|
33 | 35 |
public var isEmpty: Observable<Bool> { |
@@ -55,6 +57,8 @@ public class MessageListViewModel { |
||
55 | 57 |
public init(type: MessageType) { |
56 | 58 |
self.repository = MessageRepository() |
57 | 59 |
self.type = type |
60 |
+ |
|
61 |
+ readed() |
|
58 | 62 |
} |
59 | 63 |
|
60 | 64 |
public func reload() { |
@@ -65,7 +69,6 @@ public class MessageListViewModel { |
||
65 | 69 |
guard let `self` = self else { return } |
66 | 70 |
self._hasMoreData.onNext(model.hasMore) |
67 | 71 |
self._isEmpty.accept(!model.data.isEmpty) |
68 |
- |
|
69 | 72 |
self.items.accept(model.data) |
70 | 73 |
}, onDisposed: {[weak self] in |
71 | 74 |
guard let `self` = self else { return } |
@@ -96,12 +99,7 @@ public class MessageListViewModel { |
||
96 | 99 |
_items.remove(at: index) |
97 | 100 |
self.items.accept(_items) |
98 | 101 |
self._showMessage.onNext("删除成功") |
99 |
- }) { (error) in |
|
100 |
- guard let error = error as? InteractionError else { |
|
101 |
- return |
|
102 |
- } |
|
103 |
- self._showMessage.onNext(error.errMessage) |
|
104 |
- }.disposed(by: disposeBag) |
|
102 |
+ }).disposed(by: disposeBag) |
|
105 | 103 |
} |
106 | 104 |
|
107 | 105 |
public func removeAll() { |
@@ -109,17 +107,15 @@ public class MessageListViewModel { |
||
109 | 107 |
.subscribe(onCompleted: {[weak self] in |
110 | 108 |
guard let `self` = self else { return } |
111 | 109 |
self.items.accept([]) |
110 |
+ self._isEmpty.accept(false) |
|
112 | 111 |
self._showMessage.onNext("删除成功") |
113 |
- }) { (error) in |
|
114 |
- guard let error = error as? InteractionError else { |
|
115 |
- return |
|
116 |
- } |
|
117 |
- self._showMessage.onNext(error.errMessage) |
|
118 |
- }.disposed(by: disposeBag) |
|
112 |
+ }).disposed(by: disposeBag) |
|
119 | 113 |
} |
120 | 114 |
|
121 | 115 |
public func readed() { |
122 |
- |
|
116 |
+ repository.readed(type).subscribe(onCompleted: { |
|
117 |
+ self.messageReaded.accept(false) |
|
118 |
+ }).disposed(by: disposeBag) |
|
123 | 119 |
} |
124 | 120 |
|
125 | 121 |
public func didSelect(item: MessageListItem) { |
@@ -94,12 +94,7 @@ public class MineGroupViewModel { |
||
94 | 94 |
_items.remove(at: index) |
95 | 95 |
self.items.accept(_items) |
96 | 96 |
self._showMessage.onNext("删除成功") |
97 |
- }) { (error) in |
|
98 |
- guard let error = error as? InteractionError else { |
|
99 |
- return |
|
100 |
- } |
|
101 |
- self._showMessage.onNext(error.errMessage) |
|
102 |
- }.disposed(by: disposeBag) |
|
97 |
+ }).disposed(by: disposeBag) |
|
103 | 98 |
} |
104 | 99 |
|
105 | 100 |
public func didSelect(_ item: GroupItem) { |
@@ -1,5 +1,5 @@ |
||
1 | 1 |
// |
2 |
-// DataError.swift |
|
2 |
+// Error.swift |
|
3 | 3 |
// PaiaiDataKit |
4 | 4 |
// |
5 | 5 |
// Created by ffib on 2019/1/21. |
@@ -8,7 +8,8 @@ |
||
8 | 8 |
|
9 | 9 |
import Foundation |
10 | 10 |
|
11 |
-public struct InteractionError: Error { |
|
11 |
+public struct BusinessError: Error { |
|
12 | 12 |
public var id: Int |
13 |
- public var errMessage: String |
|
14 | 13 |
} |
14 |
+ |
|
15 |
+public struct ParseError: Error {} |
@@ -6,7 +6,7 @@ |
||
6 | 6 |
// Copyright © 2019 yb. All rights reserved. |
7 | 7 |
// |
8 | 8 |
|
9 |
-import Foundation |
|
9 |
+import UIKit |
|
10 | 10 |
|
11 | 11 |
class FadeToastAnimator: ToastAnimator { |
12 | 12 |
func toastIn(in view: UIView, completion: ((Bool) -> Void)?) { |
@@ -6,7 +6,7 @@ |
||
6 | 6 |
// Copyright © 2019 yb. All rights reserved. |
7 | 7 |
// |
8 | 8 |
|
9 |
-import Foundation |
|
9 |
+import UIKit |
|
10 | 10 |
|
11 | 11 |
private let globalInstance = Toast() |
12 | 12 |
|
@@ -6,7 +6,7 @@ |
||
6 | 6 |
// Copyright © 2019 yb. All rights reserved. |
7 | 7 |
// |
8 | 8 |
|
9 |
-import Foundation |
|
9 |
+import UIKit |
|
10 | 10 |
|
11 | 11 |
public protocol ToastAnimator { |
12 | 12 |
func toastIn(in view: UIView, completion: ((Bool) -> Void)?) |
@@ -6,7 +6,7 @@ |
||
6 | 6 |
// Copyright © 2019 yb. All rights reserved. |
7 | 7 |
// |
8 | 8 |
|
9 |
-import Foundation |
|
9 |
+import UIKit |
|
10 | 10 |
|
11 | 11 |
public struct ToastOption { |
12 | 12 |
var tintColor: UIColor = UIColor.white |
@@ -8,7 +8,7 @@ |
||
8 | 8 |
|
9 | 9 |
import UIKit |
10 | 10 |
|
11 |
-class ToastView: NiblessView { |
|
11 |
+class ToastView: UIView { |
|
12 | 12 |
|
13 | 13 |
fileprivate var option: ToastOption |
14 | 14 |
fileprivate var toastType: Toast.ToastType |
@@ -34,6 +34,11 @@ class ToastView: NiblessView { |
||
34 | 34 |
initProperty() |
35 | 35 |
} |
36 | 36 |
|
37 |
+ @available(*, unavailable, message: "Loading this view from a nib is unsupported") |
|
38 |
+ public required init?(coder aDecoder: NSCoder) { |
|
39 |
+ fatalError("Loading this view from a nib is unsupported") |
|
40 |
+ } |
|
41 |
+ |
|
37 | 42 |
private func initProperty() { |
38 | 43 |
alpha = 0 |
39 | 44 |
layer.cornerRadius = 5 |
@@ -40,6 +40,12 @@ public extension UIImage { |
||
40 | 40 |
resizingMode: .stretch) |
41 | 41 |
} |
42 | 42 |
|
43 |
+ public static var right: UIImage? { |
|
44 |
+ return UIImage(named: "navigation-right")?.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0), |
|
45 |
+ resizingMode: .stretch) |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ |
|
43 | 49 |
public static var verticalPoints: UIImage? { |
44 | 50 |
return UIImage(named: "navigation-vertical-points")?.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0), |
45 | 51 |
resizingMode: .stretch) |
@@ -90,9 +90,9 @@ extension UITextView: UITextViewDelegate { |
||
90 | 90 |
/// Resize the placeholder UILabel to make sure it's in the same position as the UITextView text |
91 | 91 |
private func resizePlaceholder() { |
92 | 92 |
if let placeholderLabel = viewWithTag(1000001) as! UILabel? { |
93 |
- let labelX = self.textContainer.lineFragmentPadding |
|
94 |
- let labelY = self.textContainerInset.top - 2 |
|
95 |
- let labelWidth = self.frame.width - (labelX * 2) |
|
93 |
+ let labelX = textContainer.lineFragmentPadding + textContainerInset.left |
|
94 |
+ let labelY = textContainerInset.top - 2 |
|
95 |
+ let labelWidth = frame.width - (labelX * 2) |
|
96 | 96 |
let labelHeight = placeholderLabel.frame.height |
97 | 97 |
|
98 | 98 |
placeholderLabel.frame = CGRect(x: labelX, y: labelY, width: labelWidth, height: labelHeight) |
@@ -115,25 +115,6 @@ extension UITextView: UITextViewDelegate { |
||
115 | 115 |
} |
116 | 116 |
} |
117 | 117 |
|
118 |
- |
|
119 |
-extension UITextView { |
|
120 |
- |
|
121 |
- private struct AssociatedKeys { |
|
122 |
- static var adaptiveHeightKey = "UITextView.adaptiveHeightKey" |
|
123 |
- } |
|
124 |
- |
|
125 |
-// public var isAdaptiveHeight: Bool { |
|
126 |
-// get { |
|
127 |
-// return associatedObject(key: &AssociatedKeys.adaptiveHeightKey, initialiser: { () -> Bool in |
|
128 |
-// return false |
|
129 |
-// }) |
|
130 |
-// } |
|
131 |
-// set { |
|
132 |
-// associateObject(key: &AssociatedKeys.adaptiveHeightKey, value: newValue) |
|
133 |
-// } |
|
134 |
-// } |
|
135 |
-} |
|
136 |
- |
|
137 | 118 |
// scroll |
138 | 119 |
extension UITextView { |
139 | 120 |
|
@@ -1,187 +0,0 @@ |
||
1 |
-// |
|
2 |
-// FFAlertController.swift |
|
3 |
-// FFAlert |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/11/13. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-//public enum FFAlertStyle { |
|
12 |
-// case actionSheet |
|
13 |
-// case alert |
|
14 |
-//} |
|
15 |
-// |
|
16 |
-//public class FFAlertController: UIViewController { |
|
17 |
-// |
|
18 |
-//// private |
|
19 |
-// private var transitionDelegate: FFTransitioning |
|
20 |
-// private var alert: UIView & FFAlertRepresentable |
|
21 |
-// |
|
22 |
-// public var alertStyle: FFAlertStyle |
|
23 |
-// public var contentEdgeInsets: UIEdgeInsets { |
|
24 |
-// get { return self.alert.contentEdgInsets } |
|
25 |
-// set { alert.contentEdgInsets = newValue } |
|
26 |
-// } |
|
27 |
-// |
|
28 |
-// public var attributedTitle: NSAttributedString? { |
|
29 |
-// get { return self.alert.title } |
|
30 |
-// set { self.alert.title = newValue } |
|
31 |
-// } |
|
32 |
-// |
|
33 |
-// public var attributedMessage: NSAttributedString? { |
|
34 |
-// get { return self.alert.message } |
|
35 |
-// set { self.alert.message = newValue } |
|
36 |
-// } |
|
37 |
-// |
|
38 |
-// public override var title: String? { |
|
39 |
-// get { return attributedTitle?.string } |
|
40 |
-// set { attributedTitle = NSAttributedString(string: newValue ?? "", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17), NSAttributedString.Key.foregroundColor: UIColor.init(red: 0.2, green: 0.2, blue: 0.2, alpha: 1.0)]) } |
|
41 |
-// } |
|
42 |
-// |
|
43 |
-// public var message: String? { |
|
44 |
-// get { return attributedMessage?.string } |
|
45 |
-// set { attributedMessage = NSAttributedString(string: newValue ?? "", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14), NSAttributedString.Key.foregroundColor: UIColor.init(red: 0.6, green: 0.6, blue: 0.6, alpha: 1.0)]) } |
|
46 |
-// } |
|
47 |
-// |
|
48 |
-// private var alertActions: [FFAlertAction] { |
|
49 |
-// get { return alert.alertActions } |
|
50 |
-// set { alert.alertActions = newValue } |
|
51 |
-// } |
|
52 |
-// |
|
53 |
-// public var alertEdgInsets: (left: CGFloat, right: CGFloat) { |
|
54 |
-// get { return alert.edgInsets } |
|
55 |
-// set { alert.edgInsets = newValue } |
|
56 |
-// } |
|
57 |
-// |
|
58 |
-// convenience init(title: String? = nil, message: String? = nil, |
|
59 |
-// customView: UIView, |
|
60 |
-// alertStyle: FFAlertStyle = .alert) { |
|
61 |
-// self.init(alertStyle: alertStyle) |
|
62 |
-// self.alert.contentView = customView |
|
63 |
-// self.title = title |
|
64 |
-// self.message = message |
|
65 |
-// } |
|
66 |
-// |
|
67 |
-// convenience init(title: String? = nil, message: String? = nil, |
|
68 |
-// alertStyle: FFAlertStyle = .alert) { |
|
69 |
-// self.init(alertStyle: alertStyle) |
|
70 |
-// self.title = title |
|
71 |
-// self.message = message |
|
72 |
-// |
|
73 |
-// } |
|
74 |
-// |
|
75 |
-// convenience init(attributedTitle: NSAttributedString? = nil, |
|
76 |
-// attributedMessage: NSAttributedString? = nil, |
|
77 |
-// alertStyle: FFAlertStyle = .alert) { |
|
78 |
-// self.init(alertStyle: alertStyle) |
|
79 |
-// self.attributedTitle = attributedTitle |
|
80 |
-// self.attributedMessage = attributedMessage |
|
81 |
-// } |
|
82 |
-// |
|
83 |
-// private init(alertStyle: FFAlertStyle) { |
|
84 |
-// switch alertStyle { |
|
85 |
-// case .alert: |
|
86 |
-// self.alert = FFAlertView() |
|
87 |
-// case .actionSheet: |
|
88 |
-// self.alert = FFSheetView() |
|
89 |
-// } |
|
90 |
-// self.alertStyle = alertStyle |
|
91 |
-// self.transitionDelegate = FFTransitioning(alertStyle: alertStyle) |
|
92 |
-// super.init(nibName: nil, bundle: nil) |
|
93 |
-// commonInit() |
|
94 |
-// } |
|
95 |
-// |
|
96 |
-// required public init?(coder aDecoder: NSCoder) { |
|
97 |
-// fatalError("init(coder:) has not been implemented") |
|
98 |
-// } |
|
99 |
-// |
|
100 |
-// private func commonInit() { |
|
101 |
-// self.modalPresentationStyle = .custom |
|
102 |
-// self.transitioningDelegate = self.transitionDelegate |
|
103 |
-// } |
|
104 |
-// |
|
105 |
-// override public var preferredStatusBarStyle: UIStatusBarStyle { |
|
106 |
-// return presentingViewController?.preferredStatusBarStyle ?? .default |
|
107 |
-// } |
|
108 |
-// |
|
109 |
-// override public var supportedInterfaceOrientations: UIInterfaceOrientationMask { |
|
110 |
-// return presentingViewController?.supportedInterfaceOrientations ?? super.supportedInterfaceOrientations |
|
111 |
-// } |
|
112 |
-// |
|
113 |
-// override public func viewDidLoad() { |
|
114 |
-// super.viewDidLoad() |
|
115 |
-// configurationOfAlertView() |
|
116 |
-// let tap = UITapGestureRecognizer(target: self, action: #selector(disappear)) |
|
117 |
-// tap.delegate = self |
|
118 |
-// view.addGestureRecognizer(tap) |
|
119 |
-// } |
|
120 |
-// |
|
121 |
-// @objc |
|
122 |
-// func disappear() { |
|
123 |
-// dismiss(animated: true, completion: nil) |
|
124 |
-// } |
|
125 |
-// |
|
126 |
-// func configurationOfAlertView() { |
|
127 |
-// view.addSubview(alert) |
|
128 |
-// alert.translatesAutoresizingMaskIntoConstraints = false |
|
129 |
-// alert.backgroundColor = UIColor.white |
|
130 |
-// switch alertStyle { |
|
131 |
-// case .actionSheet: |
|
132 |
-// NSLayoutConstraint.activate( |
|
133 |
-// [NSLayoutConstraint(item: alert, attribute: .leading, |
|
134 |
-// relatedBy: .equal, |
|
135 |
-// toItem: view, attribute: .leading, |
|
136 |
-// multiplier: 1, constant: alertEdgInsets.left), |
|
137 |
-// NSLayoutConstraint(item: alert, attribute: .bottom, |
|
138 |
-// relatedBy: .equal, |
|
139 |
-// toItem: view, attribute: .bottom, |
|
140 |
-// multiplier: 1, constant: 0), |
|
141 |
-// NSLayoutConstraint(item: alert, attribute: .trailing, |
|
142 |
-// relatedBy: .equal, |
|
143 |
-// toItem: view, attribute: .trailing, |
|
144 |
-// multiplier: 1, constant: -alertEdgInsets.right), |
|
145 |
-// NSLayoutConstraint(item: alert, attribute: .height, |
|
146 |
-// relatedBy: .lessThanOrEqual, |
|
147 |
-// toItem: view, attribute: .height, |
|
148 |
-// multiplier: 1, constant: 0)] |
|
149 |
-// ) |
|
150 |
-// alert.setContentCompressionResistancePriority(.required, for: .vertical) |
|
151 |
-// case .alert: |
|
152 |
-// NSLayoutConstraint.activate( |
|
153 |
-// [NSLayoutConstraint(item: alert, attribute: .leading, |
|
154 |
-// relatedBy: .equal, |
|
155 |
-// toItem: view, attribute: .leading, |
|
156 |
-// multiplier: 1, constant: alertEdgInsets.left), |
|
157 |
-// NSLayoutConstraint(item: alert, attribute: .centerY, |
|
158 |
-// relatedBy: .equal, |
|
159 |
-// toItem: view, attribute: .centerY, |
|
160 |
-// multiplier: 1, constant: 0), |
|
161 |
-// NSLayoutConstraint(item: alert, attribute: .trailing, |
|
162 |
-// relatedBy: .equal, |
|
163 |
-// toItem: view, attribute: .trailing, |
|
164 |
-// multiplier: 1, constant: -alertEdgInsets.right), |
|
165 |
-// NSLayoutConstraint(item: alert, attribute: .height, |
|
166 |
-// relatedBy: .lessThanOrEqual, |
|
167 |
-// toItem: view, attribute: .height, |
|
168 |
-// multiplier: 1, constant: 0)] |
|
169 |
-// ) |
|
170 |
-// alert.setContentCompressionResistancePriority(.required, for: .vertical) |
|
171 |
-// } |
|
172 |
-// |
|
173 |
-// } |
|
174 |
-// |
|
175 |
-// func addAlertAction(alertAction: FFAlertAction) { |
|
176 |
-// alertActions.append(alertAction) |
|
177 |
-// } |
|
178 |
-//} |
|
179 |
-// |
|
180 |
-//extension FFAlertController: UIGestureRecognizerDelegate { |
|
181 |
-// public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { |
|
182 |
-// if alert.frame.contains(touch.location(in: view)) { |
|
183 |
-// return false |
|
184 |
-// } |
|
185 |
-// return true |
|
186 |
-// } |
|
187 |
-//} |
@@ -1,21 +0,0 @@ |
||
1 |
-// |
|
2 |
-// FFAlertControllerRepresentable.swift |
|
3 |
-// FFAlert |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/11/17. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-//protocol FFAlertRepresentable { |
|
12 |
-// var titleLabel: FFAlertLabel { get set } |
|
13 |
-// var messageLabel: FFAlertLabel { get set } |
|
14 |
-// var contentView: UIView? { get set } |
|
15 |
-// var alertActions: [FFAlertAction] { get set } |
|
16 |
-// var contentEdgInsets: UIEdgeInsets { get set } |
|
17 |
-// var title: NSAttributedString? { get set } |
|
18 |
-// var message: NSAttributedString? { get set } |
|
19 |
-// var contentHeight: CGFloat { get set } |
|
20 |
-// var edgInsets: (left: CGFloat, right: CGFloat) { get set } |
|
21 |
-//} |
@@ -1,29 +0,0 @@ |
||
1 |
-// |
|
2 |
-// FFAlertLabel.swift |
|
3 |
-// FFAlert |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/11/14. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-class FFAlertLabel: UILabel { |
|
12 |
- |
|
13 |
- override var attributedText: NSAttributedString? { |
|
14 |
- didSet { |
|
15 |
- sizeToFit() |
|
16 |
- } |
|
17 |
- } |
|
18 |
- |
|
19 |
- init() { |
|
20 |
- super.init(frame: CGRect.zero) |
|
21 |
- self.textAlignment = .center |
|
22 |
- self.numberOfLines = 0 |
|
23 |
- self.translatesAutoresizingMaskIntoConstraints = false |
|
24 |
- } |
|
25 |
- |
|
26 |
- required init?(coder aDecoder: NSCoder) { |
|
27 |
- super.init(coder: aDecoder) |
|
28 |
- } |
|
29 |
-} |
@@ -1,41 +0,0 @@ |
||
1 |
-// |
|
2 |
-// FFSheetActionCell.swift |
|
3 |
-// FFAlert |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/11/17. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-//class FFSheetActionCell: UITableViewCell { |
|
12 |
-// |
|
13 |
-// var label = UILabel() |
|
14 |
-// |
|
15 |
-// func setInfo(alertAction: FFAlertAction) { |
|
16 |
-// addSubview(label) |
|
17 |
-// label.translatesAutoresizingMaskIntoConstraints = false |
|
18 |
-// label.attributedText = alertAction.attributedTitle |
|
19 |
-// label.backgroundColor = alertAction.backgroundColor |
|
20 |
-// label.textAlignment = .center |
|
21 |
-// let actionEdgInsets = alertAction.contentEdgInsets ?? UIEdgeInsets.zero |
|
22 |
-// NSLayoutConstraint.activate( |
|
23 |
-// [NSLayoutConstraint(item: label, attribute: .leading, |
|
24 |
-// relatedBy: .equal, |
|
25 |
-// toItem: self, attribute: .leading, |
|
26 |
-// multiplier: 1, constant: actionEdgInsets.left), |
|
27 |
-// NSLayoutConstraint(item: label, attribute: .trailing, |
|
28 |
-// relatedBy: .equal, |
|
29 |
-// toItem: self, attribute: .trailing, |
|
30 |
-// multiplier: 1, constant: -actionEdgInsets.right), |
|
31 |
-// NSLayoutConstraint(item: label, attribute: .top, |
|
32 |
-// relatedBy: .equal, |
|
33 |
-// toItem: self, attribute: .top, |
|
34 |
-// multiplier: 1, constant: actionEdgInsets.top), |
|
35 |
-// NSLayoutConstraint(item: label, attribute: .bottom, |
|
36 |
-// relatedBy: .equal, |
|
37 |
-// toItem: self, attribute: .bottom, |
|
38 |
-// multiplier: 1, constant: -actionEdgInsets.bottom - 6)] |
|
39 |
-// ) |
|
40 |
-// } |
|
41 |
-//} |
@@ -31,6 +31,7 @@ public final class ActionSheetView: UIView { |
||
31 | 31 |
guard viewNotReady else { return } |
32 | 32 |
constructViewHierarchy() |
33 | 33 |
activateConstraints() |
34 |
+ installTarget() |
|
34 | 35 |
backgroundColor = UIColor(r: 153, g: 153, b: 153) |
35 | 36 |
viewNotReady = false |
36 | 37 |
} |
@@ -58,6 +59,36 @@ public final class ActionSheetView: UIView { |
||
58 | 59 |
_cancelItem = action.style.item |
59 | 60 |
} |
60 | 61 |
} |
62 |
+ |
|
63 |
+ private func installTarget() { |
|
64 |
+ if cancelAction != nil { |
|
65 |
+ _cancelItem?.addTarget(self, action: #selector(cancelAction(btn:)), for: .touchUpInside) |
|
66 |
+ } |
|
67 |
+ |
|
68 |
+ for (i, item) in _alertItems.enumerated() { |
|
69 |
+ item.sign = i |
|
70 |
+ item.addTarget(self, action: #selector(alertAction), for: .touchUpInside) |
|
71 |
+ } |
|
72 |
+ } |
|
73 |
+ |
|
74 |
+ @objc private func alertAction(btn: UIButton) { |
|
75 |
+ guard let alertItem = btn as? AlertItem else { return } |
|
76 |
+ alertActions[alertItem.sign].handler?(alertItem) |
|
77 |
+ |
|
78 |
+ dismissSuperViewController() |
|
79 |
+ } |
|
80 |
+ |
|
81 |
+ @objc private func cancelAction(btn: UIButton) { |
|
82 |
+ guard let cancelItem = _cancelItem else { return } |
|
83 |
+ cancelAction?.handler?(cancelItem) |
|
84 |
+ |
|
85 |
+ dismissSuperViewController() |
|
86 |
+ } |
|
87 |
+ |
|
88 |
+ private func dismissSuperViewController() { |
|
89 |
+ guard let vc = getSuperViewController() else { return } |
|
90 |
+ vc.dismissController() |
|
91 |
+ } |
|
61 | 92 |
} |
62 | 93 |
|
63 | 94 |
/// MARK: |
@@ -9,6 +9,7 @@ |
||
9 | 9 |
import UIKit |
10 | 10 |
|
11 | 11 |
public class AlertItem: UIButton { |
12 |
+ var sign = 0 |
|
12 | 13 |
|
13 | 14 |
public override init(frame: CGRect) { |
14 | 15 |
super.init(frame: frame) |
@@ -1,32 +0,0 @@ |
||
1 |
-// |
|
2 |
-// FFProgress.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by zhengjianfei on 2017/3/22. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-class FFProgress: UIView { |
|
12 |
- @IBInspectable var lineColor = UIColor.red |
|
13 |
- @IBInspectable var lineWidth: CGFloat = 6 |
|
14 |
- let progressLayer = CAShapeLayer() |
|
15 |
- var strokeEnd: CGFloat = 0.0 { |
|
16 |
- didSet { |
|
17 |
- progressLayer.strokeEnd = strokeEnd |
|
18 |
- } |
|
19 |
- } |
|
20 |
- |
|
21 |
- override func draw(_ rect: CGRect) { |
|
22 |
- let bezierPath = UIBezierPath(arcCenter:CGPoint(x: self.width / 2, y: self.height / 2), radius: self.width / 2, startAngle: .pi / 180.0, endAngle: .pi / -2.0, clockwise: true) |
|
23 |
- progressLayer.frame = self.bounds |
|
24 |
- progressLayer.fillColor = UIColor.clear.cgColor |
|
25 |
- progressLayer.strokeColor = lineColor.cgColor |
|
26 |
- progressLayer.lineCap = kCALineCapRound |
|
27 |
- progressLayer.lineWidth = lineWidth |
|
28 |
- progressLayer.strokeEnd = strokeEnd |
|
29 |
- progressLayer.path = bezierPath.cgPath |
|
30 |
- self.layer.addSublayer(progressLayer) |
|
31 |
- } |
|
32 |
-} |
@@ -15,7 +15,7 @@ public extension GestureRecognizerDelegate where Self: UIViewController & Naviga |
||
15 | 15 |
gestureRecognizer.isKind(of: UIPanGestureRecognizer.self), |
16 | 16 |
let pan = gestureRecognizer as? UIPanGestureRecognizer { |
17 | 17 |
let point = pan.translation(in: self.view) |
18 |
- if point.x > 0 { |
|
18 |
+ if point.x > 30 { |
|
19 | 19 |
return true |
20 | 20 |
} |
21 | 21 |
} |
@@ -14,6 +14,8 @@ public protocol GestureRecognizerDelegate: class { |
||
14 | 14 |
|
15 | 15 |
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, |
16 | 16 |
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool |
17 |
+ |
|
18 |
+ func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool |
|
17 | 19 |
} |
18 | 20 |
|
19 | 21 |
public extension GestureRecognizerDelegate { |
@@ -26,4 +28,8 @@ public extension GestureRecognizerDelegate { |
||
26 | 28 |
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { |
27 | 29 |
return false |
28 | 30 |
} |
31 |
+ |
|
32 |
+ func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { |
|
33 |
+ return true |
|
34 |
+ } |
|
29 | 35 |
} |
@@ -15,6 +15,11 @@ class GestureRecognizerProxy: NSObject, UIGestureRecognizerDelegate { |
||
15 | 15 |
delegate = target |
16 | 16 |
} |
17 | 17 |
|
18 |
+ func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { |
|
19 |
+ guard let d = delegate else { return false } |
|
20 |
+ return d.gestureRecognizerShouldBegin(gestureRecognizer) |
|
21 |
+ } |
|
22 |
+ |
|
18 | 23 |
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { |
19 | 24 |
guard let d = delegate else { return false } |
20 | 25 |
return d.gestureRecognizer(gestureRecognizer, shouldReceive: touch) |
@@ -17,12 +17,6 @@ protocol Coordinator {} |
||
17 | 17 |
|
18 | 18 |
public final class AppCoordinator { |
19 | 19 |
|
20 |
- fileprivate enum CoordinatorKey: String { |
|
21 |
- case home = "home" |
|
22 |
- case message = "message" |
|
23 |
- case mine = "mine" |
|
24 |
- } |
|
25 |
- |
|
26 | 20 |
var shareUserInfoViewModel = UserInfoViewModel() |
27 | 21 |
var containerViewController: ContainerViewController |
28 | 22 |
var navigationController: UINavigationController |
@@ -0,0 +1,18 @@ |
||
1 |
+// |
|
2 |
+// CoordinatorKey.swift |
|
3 |
+// Paiai_iOS |
|
4 |
+// |
|
5 |
+// Created by ffib on 2019/3/26. |
|
6 |
+// Copyright © 2019 yb. All rights reserved. |
|
7 |
+// |
|
8 |
+ |
|
9 |
+import Foundation |
|
10 |
+ |
|
11 |
+enum CoordinatorKey: String { |
|
12 |
+ case home = "home" |
|
13 |
+ case message = "message" |
|
14 |
+ case mine = "mine" |
|
15 |
+ case group = "group" |
|
16 |
+ case groupDetail = "groupDetail" |
|
17 |
+ case photoDetail = "photoDetail" |
|
18 |
+} |
@@ -30,7 +30,7 @@ |
||
30 | 30 |
<constraint firstAttribute="height" constant="64" id="dza-Pq-ZRx"/> |
31 | 31 |
<constraint firstAttribute="width" constant="64" id="kEi-cK-cxH"/> |
32 | 32 |
</constraints> |
33 |
- <state key="normal" image="BTN-拍照"/> |
|
33 |
+ <state key="normal" image="BTN-camera"/> |
|
34 | 34 |
<state key="selected" image="BTN-拍照-press"/> |
35 | 35 |
<connections> |
36 | 36 |
<action selector="takePhotoAction" destination="qPy-31-33I" eventType="touchUpInside" id="vIP-Gk-vDZ"/> |
@@ -60,7 +60,7 @@ |
||
60 | 60 |
</scene> |
61 | 61 |
</scenes> |
62 | 62 |
<resources> |
63 |
- <image name="BTN-拍照" width="168" height="168"/> |
|
63 |
+ <image name="BTN-camera" width="168" height="168"/> |
|
64 | 64 |
<image name="BTN-拍照-press" width="16" height="16"/> |
65 | 65 |
</resources> |
66 | 66 |
</document> |
@@ -14,7 +14,7 @@ class GroupCoordinator: Coordinator { |
||
14 | 14 |
let navigationController: UINavigationController |
15 | 15 |
let groupViewController: GroupViewController |
16 | 16 |
|
17 |
- var coordinators: [String: Coordinator] = [:] |
|
17 |
+ var coordinators: [CoordinatorKey: Coordinator] = [:] |
|
18 | 18 |
|
19 | 19 |
init(_ groupVC: GroupViewController, navigationController: UINavigationController) { |
20 | 20 |
self.groupViewController = groupVC |
@@ -28,7 +28,7 @@ class GroupCoordinator: Coordinator { |
||
28 | 28 |
extension GroupCoordinator: GroupViewModelDelegate { |
29 | 29 |
func navigateToGroupDetail(_ item: GroupItem) { |
30 | 30 |
let coordinator = GroupDetailCoordinator(makeGroupDetailViewController(item), navigationController: navigationController) |
31 |
- coordinators["groupDetail"] = coordinator |
|
31 |
+ coordinators[.groupDetail] = coordinator |
|
32 | 32 |
|
33 | 33 |
navigationController.pushViewController(coordinator.groupDetailViewController) |
34 | 34 |
} |
@@ -40,7 +40,7 @@ extension GroupCoordinator: GroupViewModelDelegate { |
||
40 | 40 |
let coordinator = PhotoDetailCoordinator(ctl, nav: navigationController, |
41 | 41 |
viewModel: viewModel, |
42 | 42 |
listViewModel: PhotoDetailListViewModel(items: items, currIndex: currIndex)) |
43 |
- coordinators["photoDetail"] = coordinator |
|
43 |
+ coordinators[.photoDetail] = coordinator |
|
44 | 44 |
coordinator.start() |
45 | 45 |
navigationController.pushViewController(coordinator.photoDetailViewController) |
46 | 46 |
} |
@@ -440,7 +440,7 @@ |
||
440 | 440 |
<constraint firstAttribute="width" constant="33" id="Lao-Lp-1av"/> |
441 | 441 |
<constraint firstAttribute="height" constant="33" id="wB9-o4-baK"/> |
442 | 442 |
</constraints> |
443 |
- <state key="normal" title="Button" image="delete"/> |
|
443 |
+ <state key="normal" title="Button" image="BTN-delete"/> |
|
444 | 444 |
<connections> |
445 | 445 |
<action selector="deleteMemberAction:" destination="DJ1-Ig-ZYH" eventType="touchUpInside" id="kwS-bB-js1"/> |
446 | 446 |
</connections> |
@@ -490,7 +490,7 @@ |
||
490 | 490 |
</scene> |
491 | 491 |
</scenes> |
492 | 492 |
<resources> |
493 |
- <image name="delete" width="66" height="66"/> |
|
493 |
+ <image name="BTN-delete" width="66" height="66"/> |
|
494 | 494 |
<image name="list-QR" width="36" height="36"/> |
495 | 495 |
<image name="list-arrow" width="24" height="36"/> |
496 | 496 |
<image name="navigation-background" width="12" height="132"/> |
@@ -66,7 +66,8 @@ final class GroupViewController: UIViewController { |
||
66 | 66 |
|
67 | 67 |
private func setupReloadControl() { |
68 | 68 |
collectionView.addPullToRefresh(PullToRefresh()) { |
69 |
- [unowned self] in |
|
69 |
+ [weak self] in |
|
70 |
+ guard let `self` = self else { return } |
|
70 | 71 |
self.viewModel.reload() |
71 | 72 |
} |
72 | 73 |
collectionView.startRefreshing(at: .top) |
@@ -11,13 +11,6 @@ import PaiaiDataKit |
||
11 | 11 |
import PaiaiUIKit |
12 | 12 |
|
13 | 13 |
class HomeCoordinator: Coordinator { |
14 |
- fileprivate enum CoordinatorKey: String { |
|
15 |
- case home = "home" |
|
16 |
- case message = "message" |
|
17 |
- case mine = "mine" |
|
18 |
- case photoDetail = "photoDetail" |
|
19 |
- case group = "group" |
|
20 |
- } |
|
21 | 14 |
fileprivate var coordinators = [CoordinatorKey: Coordinator]() |
22 | 15 |
|
23 | 16 |
var homeViewController: HomeViewController |
@@ -53,7 +53,8 @@ final class HomeViewController: UIViewController { |
||
53 | 53 |
|
54 | 54 |
private func setupLoadingControl() { |
55 | 55 |
collectionView.addPullToRefresh(PullToRefresh(position: .bottom)) { |
56 |
- [unowned self] in |
|
56 |
+ [weak self] in |
|
57 |
+ guard let `self` = self else { return } |
|
57 | 58 |
self.viewModel.preload() |
58 | 59 |
} |
59 | 60 |
} |
@@ -36,14 +36,14 @@ |
||
36 | 36 |
<subviews> |
37 | 37 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rAd-6a-QN5"> |
38 | 38 |
<rect key="frame" x="212" y="30" width="126" height="126"/> |
39 |
- <state key="normal" image="闪光灯-默认70%透明度,按压100%"/> |
|
39 |
+ <state key="normal" image="BTN-flash"/> |
|
40 | 40 |
<connections> |
41 | 41 |
<action selector="openLight" destination="xAo-Yl-fd5" eventType="touchUpInside" id="S8Z-U4-bVm"/> |
42 | 42 |
</connections> |
43 | 43 |
</button> |
44 | 44 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WMh-c4-xbf"> |
45 | 45 |
<rect key="frame" x="37" y="30" width="126" height="126"/> |
46 |
- <state key="normal" image="从相册选取-默认70%透明度,按压100%"/> |
|
46 |
+ <state key="normal" image="BTN-photoAlbum"/> |
|
47 | 47 |
<connections> |
48 | 48 |
<action selector="chooseFromSYSPhoto" destination="xAo-Yl-fd5" eventType="touchUpInside" id="U7Z-Vq-2r2"/> |
49 | 49 |
</connections> |
@@ -119,7 +119,7 @@ |
||
119 | 119 |
<constraint firstAttribute="width" constant="64" id="6uz-fL-QnX"/> |
120 | 120 |
<constraint firstAttribute="height" constant="64" id="fVK-Un-AnR"/> |
121 | 121 |
</constraints> |
122 |
- <state key="normal" image="BTN-扫码"/> |
|
122 |
+ <state key="normal" image="BTN-scanQR"/> |
|
123 | 123 |
<state key="selected" image="BTN-扫码-press"/> |
124 | 124 |
</button> |
125 | 125 |
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="EqW-Tv-dAo"> |
@@ -128,7 +128,7 @@ |
||
128 | 128 |
<constraint firstAttribute="height" constant="64" id="6oe-ry-LNq"/> |
129 | 129 |
<constraint firstAttribute="width" constant="64" id="bCz-yX-g9j"/> |
130 | 130 |
</constraints> |
131 |
- <state key="normal" image="BTN-新增"/> |
|
131 |
+ <state key="normal" image="BTN-add"/> |
|
132 | 132 |
<state key="selected" image="BTN-新增-press"/> |
133 | 133 |
</button> |
134 | 134 |
</subviews> |
@@ -437,7 +437,7 @@ |
||
437 | 437 |
<rect key="frame" x="94" y="548.5" width="187.5" height="53.5"/> |
438 | 438 |
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/> |
439 | 439 |
<inset key="imageEdgeInsets" minX="-10" minY="0.0" maxX="0.0" maxY="0.0"/> |
440 |
- <state key="normal" image="微信"> |
|
440 |
+ <state key="normal" image="BTN-weixin"> |
|
441 | 441 |
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
442 | 442 |
</state> |
443 | 443 |
<userDefinedRuntimeAttributes> |
@@ -480,16 +480,16 @@ |
||
480 | 480 |
</scene> |
481 | 481 |
</scenes> |
482 | 482 |
<resources> |
483 |
- <image name="BTN-扫码" width="168" height="168"/> |
|
483 |
+ <image name="BTN-add" width="168" height="168"/> |
|
484 |
+ <image name="BTN-flash" width="126" height="126"/> |
|
485 |
+ <image name="BTN-photoAlbum" width="126" height="126"/> |
|
486 |
+ <image name="BTN-scanQR" width="168" height="168"/> |
|
487 |
+ <image name="BTN-weixin" width="911" height="247"/> |
|
484 | 488 |
<image name="BTN-扫码-press" width="168" height="168"/> |
485 |
- <image name="BTN-新增" width="168" height="168"/> |
|
486 | 489 |
<image name="BTN-新增-press" width="168" height="168"/> |
487 | 490 |
<image name="guide1" width="1462" height="2600"/> |
488 | 491 |
<image name="guide2" width="1462" height="2600"/> |
489 | 492 |
<image name="guide3" width="1462" height="2600"/> |
490 |
- <image name="从相册选取-默认70%透明度,按压100%" width="126" height="126"/> |
|
491 |
- <image name="微信" width="911" height="247"/> |
|
492 |
- <image name="闪光灯-默认70%透明度,按压100%" width="126" height="126"/> |
|
493 | 493 |
<image name="默认头像" width="240" height="240"/> |
494 | 494 |
</resources> |
495 | 495 |
</document> |
@@ -1,6 +1,10 @@ |
||
1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 | 2 |
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES"> |
3 |
+ <device id="retina4_7" orientation="portrait"> |
|
4 |
+ <adaptation id="fullscreen"/> |
|
5 |
+ </device> |
|
3 | 6 |
<dependencies> |
7 |
+ <deployment identifier="iOS"/> |
|
4 | 8 |
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/> |
5 | 9 |
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
6 | 10 |
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
@@ -210,7 +214,7 @@ |
||
210 | 214 |
<nil key="highlightedColor"/> |
211 | 215 |
</label> |
212 | 216 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="mre-Tt-F0S"> |
213 |
- <rect key="frame" x="349" y="24" width="16" height="16"/> |
|
217 |
+ <rect key="frame" x="341" y="14" width="24" height="36"/> |
|
214 | 218 |
</imageView> |
215 | 219 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="T9q-a4-Ugc"> |
216 | 220 |
<rect key="frame" x="0.0" y="64" width="375" height="64"/> |
@@ -227,7 +231,7 @@ |
||
227 | 231 |
</constraints> |
228 | 232 |
</imageView> |
229 | 233 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="8VZ-dR-b6z"> |
230 |
- <rect key="frame" x="349" y="88" width="16" height="16"/> |
|
234 |
+ <rect key="frame" x="341" y="78" width="24" height="36"/> |
|
231 | 235 |
</imageView> |
232 | 236 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="赞" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="J3p-B7-gMi"> |
233 | 237 |
<rect key="frame" x="70" y="86" width="17" height="20"/> |
@@ -250,7 +254,7 @@ |
||
250 | 254 |
</constraints> |
251 | 255 |
</imageView> |
252 | 256 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="hJe-J2-RpF"> |
253 |
- <rect key="frame" x="349" y="152" width="16" height="16"/> |
|
257 |
+ <rect key="frame" x="341" y="142" width="24" height="36"/> |
|
254 | 258 |
</imageView> |
255 | 259 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="评论" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6fy-0a-WYd"> |
256 | 260 |
<rect key="frame" x="70" y="150" width="33" height="20"/> |
@@ -259,7 +263,7 @@ |
||
259 | 263 |
<nil key="highlightedColor"/> |
260 | 264 |
</label> |
261 | 265 |
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oLf-Xb-QSv"> |
262 |
- <rect key="frame" x="333" y="28" width="8" height="8"/> |
|
266 |
+ <rect key="frame" x="325" y="28" width="8" height="8"/> |
|
263 | 267 |
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
264 | 268 |
<constraints> |
265 | 269 |
<constraint firstAttribute="height" constant="8" id="8PB-CF-AvI"/> |
@@ -272,7 +276,7 @@ |
||
272 | 276 |
</userDefinedRuntimeAttributes> |
273 | 277 |
</view> |
274 | 278 |
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="R8U-gK-x5D"> |
275 |
- <rect key="frame" x="333" y="92" width="8" height="8"/> |
|
279 |
+ <rect key="frame" x="325" y="92" width="8" height="8"/> |
|
276 | 280 |
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
277 | 281 |
<constraints> |
278 | 282 |
<constraint firstAttribute="height" constant="8" id="pvk-DY-af3"/> |
@@ -285,7 +289,7 @@ |
||
285 | 289 |
</userDefinedRuntimeAttributes> |
286 | 290 |
</view> |
287 | 291 |
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qi9-c7-GCt"> |
288 |
- <rect key="frame" x="333" y="156" width="8" height="8"/> |
|
292 |
+ <rect key="frame" x="325" y="156" width="8" height="8"/> |
|
289 | 293 |
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
290 | 294 |
<constraints> |
291 | 295 |
<constraint firstAttribute="height" constant="8" id="d1V-XC-UJk"/> |
@@ -386,7 +390,7 @@ |
||
386 | 390 |
</scene> |
387 | 391 |
</scenes> |
388 | 392 |
<resources> |
389 |
- <image name="list-arrow" width="16" height="16"/> |
|
393 |
+ <image name="list-arrow" width="24" height="36"/> |
|
390 | 394 |
<image name="message-comment" width="144" height="144"/> |
391 | 395 |
<image name="message-system" width="144" height="144"/> |
392 | 396 |
<image name="message-thumpub" width="144" height="144"/> |
@@ -23,7 +23,7 @@ final class MessageListViewController: UIViewController { |
||
23 | 23 |
@IBOutlet weak var tableView: UITableView! |
24 | 24 |
|
25 | 25 |
var emptyView : UILabel = { |
26 |
- let empty = UILabel(frame: CGRect(x: kScreenWidth / 2 - 50, y: 74, width: 50, height: 50)) |
|
26 |
+ let empty = UILabel(frame: CGRect(x: kScreenWidth / 2 - 50, y: 5, width: 50, height: 50)) |
|
27 | 27 |
|
28 | 28 |
empty.isHidden = true |
29 | 29 |
empty.text = "当前没有任何消息" |
@@ -48,11 +48,12 @@ final class MessageListViewController: UIViewController { |
||
48 | 48 |
setup() |
49 | 49 |
binding() |
50 | 50 |
setNavigationBar() |
51 |
+ self.viewModel.reload() |
|
51 | 52 |
} |
52 | 53 |
|
53 | 54 |
private func setNavigationBar() { |
54 | 55 |
title = type.model.title |
55 |
- setRightBarButtonItem(image: UIImage.Navigation.verticalPoints, action: #selector(clearMessage)) |
|
56 |
+ setRightBarButtonItem(image: UIImage.Navigation.right, action: #selector(clearMessage)) |
|
56 | 57 |
} |
57 | 58 |
|
58 | 59 |
private func setup() { |
@@ -62,7 +63,8 @@ final class MessageListViewController: UIViewController { |
||
62 | 63 |
|
63 | 64 |
private func setupReloadControl() { |
64 | 65 |
tableView.addPullToRefresh(PullToRefresh()) { |
65 |
- [unowned self] in |
|
66 |
+ [weak self] in |
|
67 |
+ guard let `self` = self else { return } |
|
66 | 68 |
self.viewModel.reload() |
67 | 69 |
} |
68 | 70 |
tableView.startRefreshing(at: .top) |
@@ -70,7 +72,8 @@ final class MessageListViewController: UIViewController { |
||
70 | 72 |
|
71 | 73 |
private func setupLoadingControl() { |
72 | 74 |
tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { |
73 |
- [unowned self] in |
|
75 |
+ [weak self] in |
|
76 |
+ guard let `self` = self else { return } |
|
74 | 77 |
self.viewModel.preload() |
75 | 78 |
} |
76 | 79 |
} |
@@ -80,7 +83,7 @@ final class MessageListViewController: UIViewController { |
||
80 | 83 |
let alert = ActionSheetController() |
81 | 84 |
|
82 | 85 |
alert.addAlertAction(AlertAction(title: "取消", style: .cancel)) |
83 |
- alert.addAlertAction(AlertAction(title: "清空消息", handler: { (item) in |
|
86 |
+ alert.addAlertAction(AlertAction(title: "清空消息", handler: { _ in |
|
84 | 87 |
self.viewModel.removeAll() |
85 | 88 |
})) |
86 | 89 |
presentController(alert) |
@@ -101,17 +104,18 @@ fileprivate extension MessageListViewController { |
||
101 | 104 |
fileprivate extension MessageListViewController { |
102 | 105 |
|
103 | 106 |
var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageListItem>> { |
104 |
- return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageListItem>>(configureCell: { (dataSource, tableView, indexPath, item) in |
|
105 |
- switch self.type! { |
|
106 |
- case .system: |
|
107 |
- let cell = tableView.dequeueReusableCell(withIdentifier: "messageSystemCell", for: indexPath) as! MessageSystemCell |
|
108 |
- cell.setInfo(item) |
|
109 |
- return cell |
|
110 |
- case .comment, .thumbup: |
|
111 |
- let cell = tableView.dequeueReusableCell(withIdentifier: "messageCommentAndThumbupCell", for: indexPath) as! MessageCommentAndThumbupCell |
|
112 |
- cell.setInfo(item) |
|
113 |
- return cell |
|
114 |
- } |
|
107 |
+ return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageListItem>>( |
|
108 |
+ configureCell: { (dataSource, tableView, indexPath, item) in |
|
109 |
+ switch self.type! { |
|
110 |
+ case .system: |
|
111 |
+ let cell = tableView.dequeueReusableCell(withIdentifier: "messageSystemCell", for: indexPath) as! MessageSystemCell |
|
112 |
+ cell.setInfo(item) |
|
113 |
+ return cell |
|
114 |
+ case .comment, .thumbup: |
|
115 |
+ let cell = tableView.dequeueReusableCell(withIdentifier: "messageCommentAndThumbupCell", for: indexPath) as! MessageCommentAndThumbupCell |
|
116 |
+ cell.setInfo(item) |
|
117 |
+ return cell |
|
118 |
+ } |
|
115 | 119 |
}, canEditRowAtIndexPath: { _, _ in true }) |
116 | 120 |
} |
117 | 121 |
|
@@ -108,7 +108,7 @@ |
||
108 | 108 |
</viewController> |
109 | 109 |
<placeholder placeholderIdentifier="IBFirstResponder" id="ITq-MN-EQz" userLabel="First Responder" sceneMemberID="firstResponder"/> |
110 | 110 |
</objects> |
111 |
- <point key="canvasLocation" x="814.39999999999998" y="322.93853073463271"/> |
|
111 |
+ <point key="canvasLocation" x="983" y="-164"/> |
|
112 | 112 |
</scene> |
113 | 113 |
<!--Mine Feedback View Controller--> |
114 | 114 |
<scene sceneID="jVz-lZ-rOH"> |
@@ -118,48 +118,40 @@ |
||
118 | 118 |
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
119 | 119 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
120 | 120 |
<subviews> |
121 |
- <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="iOy-y4-gly"> |
|
122 |
- <rect key="frame" x="7" y="20" width="368" height="140"/> |
|
123 |
- <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
124 |
- <constraints> |
|
125 |
- <constraint firstAttribute="height" constant="140" id="rmr-7m-qu4"/> |
|
126 |
- </constraints> |
|
127 |
- <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
128 |
- <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> |
|
129 |
- </textView> |
|
130 |
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kyg-hG-JSP"> |
|
131 |
- <rect key="frame" x="0.0" y="190" width="375" height="45"/> |
|
132 |
- <constraints> |
|
133 |
- <constraint firstAttribute="height" constant="45" id="x3X-y4-kmZ"/> |
|
134 |
- </constraints> |
|
135 |
- <fontDescription key="fontDescription" type="system" pointSize="20"/> |
|
136 |
- <state key="normal" title="发送" backgroundImage="BTN-send"> |
|
137 |
- <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
138 |
- </state> |
|
139 |
- <connections> |
|
140 |
- <action selector="sendFeedBack" destination="iwu-HG-AWF" eventType="touchUpInside" id="hQt-ku-2nH"/> |
|
141 |
- </connections> |
|
142 |
- </button> |
|
143 |
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r6q-Tb-uYK"> |
|
144 |
- <rect key="frame" x="0.0" y="20" width="7" height="140"/> |
|
145 |
- <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
146 |
- <constraints> |
|
147 |
- <constraint firstAttribute="width" constant="7" id="mcu-tc-3Gz"/> |
|
148 |
- </constraints> |
|
149 |
- </view> |
|
121 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="hN3-J9-En6"> |
|
122 |
+ <rect key="frame" x="0.0" y="20" width="375" height="197"/> |
|
123 |
+ <subviews> |
|
124 |
+ <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="iOy-y4-gly"> |
|
125 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="140"/> |
|
126 |
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
127 |
+ <constraints> |
|
128 |
+ <constraint firstAttribute="height" constant="140" id="rmr-7m-qu4"/> |
|
129 |
+ </constraints> |
|
130 |
+ <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
131 |
+ <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> |
|
132 |
+ </textView> |
|
133 |
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kyg-hG-JSP"> |
|
134 |
+ <rect key="frame" x="0.0" y="152" width="375" height="45"/> |
|
135 |
+ <constraints> |
|
136 |
+ <constraint firstAttribute="height" constant="45" id="x3X-y4-kmZ"/> |
|
137 |
+ </constraints> |
|
138 |
+ <fontDescription key="fontDescription" type="system" pointSize="20"/> |
|
139 |
+ <state key="normal" title="发送" backgroundImage="BTN-send"> |
|
140 |
+ <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
141 |
+ </state> |
|
142 |
+ <connections> |
|
143 |
+ <action selector="sendFeedBack" destination="iwu-HG-AWF" eventType="touchUpInside" id="hQt-ku-2nH"/> |
|
144 |
+ </connections> |
|
145 |
+ </button> |
|
146 |
+ </subviews> |
|
147 |
+ </stackView> |
|
150 | 148 |
</subviews> |
151 | 149 |
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
152 | 150 |
<gestureRecognizers/> |
153 | 151 |
<constraints> |
154 |
- <constraint firstItem="r6q-Tb-uYK" firstAttribute="leading" secondItem="iOy-y4-gly" secondAttribute="leading" constant="-7" id="5tW-Mf-S7u"/> |
|
155 |
- <constraint firstItem="iOy-y4-gly" firstAttribute="leading" secondItem="zyN-cU-iak" secondAttribute="leading" constant="7" id="7a3-jq-iQ0"/> |
|
156 |
- <constraint firstItem="iOy-y4-gly" firstAttribute="top" secondItem="zyN-cU-iak" secondAttribute="top" id="NR4-e2-k5p"/> |
|
157 |
- <constraint firstItem="r6q-Tb-uYK" firstAttribute="bottom" secondItem="iOy-y4-gly" secondAttribute="bottom" id="VLj-GB-is8"/> |
|
158 |
- <constraint firstItem="kyg-hG-JSP" firstAttribute="top" secondItem="iOy-y4-gly" secondAttribute="bottom" constant="30" id="W7x-rO-3tW"/> |
|
159 |
- <constraint firstItem="zyN-cU-iak" firstAttribute="trailing" secondItem="iOy-y4-gly" secondAttribute="trailing" id="dHo-cB-cng"/> |
|
160 |
- <constraint firstItem="kyg-hG-JSP" firstAttribute="leading" secondItem="zyN-cU-iak" secondAttribute="leading" id="eNW-4w-6p7"/> |
|
161 |
- <constraint firstItem="r6q-Tb-uYK" firstAttribute="top" secondItem="iOy-y4-gly" secondAttribute="top" id="mcS-Zb-P9m"/> |
|
162 |
- <constraint firstItem="zyN-cU-iak" firstAttribute="trailing" secondItem="kyg-hG-JSP" secondAttribute="trailing" id="uH1-y3-dPp"/> |
|
152 |
+ <constraint firstItem="hN3-J9-En6" firstAttribute="leading" secondItem="zyN-cU-iak" secondAttribute="leading" id="grT-5w-3hd"/> |
|
153 |
+ <constraint firstAttribute="trailing" secondItem="hN3-J9-En6" secondAttribute="trailing" id="tlo-OB-46x"/> |
|
154 |
+ <constraint firstItem="hN3-J9-En6" firstAttribute="top" secondItem="zyN-cU-iak" secondAttribute="top" id="vyF-KA-cQ3"/> |
|
163 | 155 |
</constraints> |
164 | 156 |
<viewLayoutGuide key="safeArea" id="zyN-cU-iak"/> |
165 | 157 |
<connections> |
@@ -179,7 +171,7 @@ |
||
179 | 171 |
</connections> |
180 | 172 |
</tapGestureRecognizer> |
181 | 173 |
</objects> |
182 |
- <point key="canvasLocation" x="814.39999999999998" y="994.9025487256373"/> |
|
174 |
+ <point key="canvasLocation" x="292" y="-164"/> |
|
183 | 175 |
</scene> |
184 | 176 |
<!--Mine About View Controller--> |
185 | 177 |
<scene sceneID="dR7-2C-QzB"> |
@@ -189,42 +181,42 @@ |
||
189 | 181 |
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
190 | 182 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
191 | 183 |
<subviews> |
192 |
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Str-BX-Lky" userLabel="View-up"> |
|
193 |
- <rect key="frame" x="0.0" y="20" width="375" height="216"/> |
|
184 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="2I3-Nh-YZ5"> |
|
185 |
+ <rect key="frame" x="0.0" y="20" width="375" height="641"/> |
|
194 | 186 |
<subviews> |
195 |
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Logo" translatesAutoresizingMaskIntoConstraints="NO" id="B7y-Jl-E7G"> |
|
196 |
- <rect key="frame" x="117.5" y="38" width="140" height="140"/> |
|
187 |
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Str-BX-Lky" userLabel="Logo view"> |
|
188 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="216"/> |
|
189 |
+ <subviews> |
|
190 |
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo" translatesAutoresizingMaskIntoConstraints="NO" id="B7y-Jl-E7G"> |
|
191 |
+ <rect key="frame" x="117.5" y="38" width="140" height="140"/> |
|
192 |
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
193 |
+ </imageView> |
|
194 |
+ </subviews> |
|
197 | 195 |
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
198 |
- </imageView> |
|
199 |
- </subviews> |
|
200 |
- <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
201 |
- <constraints> |
|
202 |
- <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerX" secondItem="Str-BX-Lky" secondAttribute="centerX" id="5Hv-0h-6dw"/> |
|
203 |
- <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerY" secondItem="Str-BX-Lky" secondAttribute="centerY" id="ffl-F6-a1m"/> |
|
204 |
- <constraint firstAttribute="height" constant="216" id="qV0-pB-Hya"/> |
|
205 |
- </constraints> |
|
206 |
- </view> |
|
207 |
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bjC-jQ-LOw" userLabel="View-down"> |
|
208 |
- <rect key="frame" x="-4" y="236" width="383" height="431"/> |
|
209 |
- <subviews> |
|
196 |
+ <constraints> |
|
197 |
+ <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerX" secondItem="Str-BX-Lky" secondAttribute="centerX" id="5Hv-0h-6dw"/> |
|
198 |
+ <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerY" secondItem="Str-BX-Lky" secondAttribute="centerY" id="ffl-F6-a1m"/> |
|
199 |
+ <constraint firstAttribute="height" constant="216" id="qV0-pB-Hya"/> |
|
200 |
+ </constraints> |
|
201 |
+ </view> |
|
210 | 202 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mae-VW-ed0" userLabel="Contact Us View"> |
211 |
- <rect key="frame" x="0.0" y="0.0" width="383" height="48"/> |
|
203 |
+ <rect key="frame" x="0.0" y="216" width="375" height="48"/> |
|
212 | 204 |
<subviews> |
213 | 205 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-contactUs" translatesAutoresizingMaskIntoConstraints="NO" id="pVB-Uy-xXH"> |
214 | 206 |
<rect key="frame" x="16" y="8" width="32" height="32"/> |
215 | 207 |
</imageView> |
216 | 208 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系我们" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CYk-cu-pHl"> |
217 |
- <rect key="frame" x="62" y="14" width="66" height="20"/> |
|
209 |
+ <rect key="frame" x="62" y="14.5" width="65.5" height="19.5"/> |
|
218 | 210 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
219 | 211 |
<fontDescription key="fontDescription" type="system" pointSize="16"/> |
220 | 212 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
221 | 213 |
<nil key="highlightedColor"/> |
222 | 214 |
</label> |
223 | 215 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="MgR-ta-3jg"> |
224 |
- <rect key="frame" x="349" y="6" width="24" height="36"/> |
|
216 |
+ <rect key="frame" x="341" y="6" width="24" height="36"/> |
|
225 | 217 |
</imageView> |
226 | 218 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L1g-sb-a5F"> |
227 |
- <rect key="frame" x="0.0" y="0.0" width="383" height="48"/> |
|
219 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="48"/> |
|
228 | 220 |
</button> |
229 | 221 |
</subviews> |
230 | 222 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
@@ -243,23 +235,23 @@ |
||
243 | 235 |
</constraints> |
244 | 236 |
</view> |
245 | 237 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EVY-h5-0pO" userLabel="Score View"> |
246 |
- <rect key="frame" x="0.0" y="48" width="383" height="48"/> |
|
238 |
+ <rect key="frame" x="0.0" y="264" width="375" height="48"/> |
|
247 | 239 |
<subviews> |
248 | 240 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-score" translatesAutoresizingMaskIntoConstraints="NO" id="0O4-xB-jPJ"> |
249 | 241 |
<rect key="frame" x="16" y="8" width="32" height="32"/> |
250 | 242 |
</imageView> |
251 | 243 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="给我评分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JAf-2j-KJO"> |
252 |
- <rect key="frame" x="62" y="14" width="66" height="20"/> |
|
244 |
+ <rect key="frame" x="62" y="14.5" width="65.5" height="19.5"/> |
|
253 | 245 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
254 | 246 |
<fontDescription key="fontDescription" type="system" pointSize="16"/> |
255 | 247 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
256 | 248 |
<nil key="highlightedColor"/> |
257 | 249 |
</label> |
258 | 250 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="vLw-Zd-Mis"> |
259 |
- <rect key="frame" x="349" y="6" width="24" height="36"/> |
|
251 |
+ <rect key="frame" x="341" y="6" width="24" height="36"/> |
|
260 | 252 |
</imageView> |
261 | 253 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FIE-jb-ZGu"> |
262 |
- <rect key="frame" x="0.0" y="0.0" width="383" height="48"/> |
|
254 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="48"/> |
|
263 | 255 |
</button> |
264 | 256 |
</subviews> |
265 | 257 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
@@ -278,23 +270,23 @@ |
||
278 | 270 |
</constraints> |
279 | 271 |
</view> |
280 | 272 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hN9-6g-QCB" userLabel="User Agreement View"> |
281 |
- <rect key="frame" x="0.0" y="96" width="383" height="48"/> |
|
273 |
+ <rect key="frame" x="0.0" y="312" width="375" height="48"/> |
|
282 | 274 |
<subviews> |
283 | 275 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-userAgreement" translatesAutoresizingMaskIntoConstraints="NO" id="u6G-8X-fqc"> |
284 | 276 |
<rect key="frame" x="16" y="8" width="32" height="32"/> |
285 | 277 |
</imageView> |
286 | 278 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="COm-64-2lk"> |
287 |
- <rect key="frame" x="62" y="14" width="66" height="20"/> |
|
279 |
+ <rect key="frame" x="62" y="14.5" width="65.5" height="19.5"/> |
|
288 | 280 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
289 | 281 |
<fontDescription key="fontDescription" type="system" pointSize="16"/> |
290 | 282 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
291 | 283 |
<nil key="highlightedColor"/> |
292 | 284 |
</label> |
293 | 285 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="mhJ-Uj-tdj"> |
294 |
- <rect key="frame" x="349" y="6" width="24" height="36"/> |
|
286 |
+ <rect key="frame" x="341" y="6" width="24" height="36"/> |
|
295 | 287 |
</imageView> |
296 | 288 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VGv-oO-leT"> |
297 |
- <rect key="frame" x="0.0" y="0.0" width="383" height="48"/> |
|
289 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="48"/> |
|
298 | 290 |
</button> |
299 | 291 |
</subviews> |
300 | 292 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
@@ -312,49 +304,33 @@ |
||
312 | 304 |
<constraint firstItem="mhJ-Uj-tdj" firstAttribute="centerY" secondItem="hN9-6g-QCB" secondAttribute="centerY" id="z8z-9u-ZAm"/> |
313 | 305 |
</constraints> |
314 | 306 |
</view> |
307 |
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bjC-jQ-LOw" userLabel="Fill view"> |
|
308 |
+ <rect key="frame" x="0.0" y="360" width="375" height="254.5"/> |
|
309 |
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
310 |
+ </view> |
|
311 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="版本:1.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bEV-QT-Egq"> |
|
312 |
+ <rect key="frame" x="0.0" y="614.5" width="375" height="14.5"/> |
|
313 |
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
314 |
+ <fontDescription key="fontDescription" type="system" pointSize="12"/> |
|
315 |
+ <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
316 |
+ <nil key="highlightedColor"/> |
|
317 |
+ </label> |
|
318 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Copyright@pai.ai" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="inH-WZ-fdD"> |
|
319 |
+ <rect key="frame" x="0.0" y="629" width="375" height="12"/> |
|
320 |
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
321 |
+ <fontDescription key="fontDescription" type="system" pointSize="10"/> |
|
322 |
+ <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
323 |
+ <nil key="highlightedColor"/> |
|
324 |
+ </label> |
|
315 | 325 |
</subviews> |
316 |
- <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
317 |
- <constraints> |
|
318 |
- <constraint firstItem="mae-VW-ed0" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="25m-1u-PlX"/> |
|
319 |
- <constraint firstAttribute="trailing" secondItem="EVY-h5-0pO" secondAttribute="trailing" id="Cl6-If-4fD"/> |
|
320 |
- <constraint firstItem="EVY-h5-0pO" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="Cmx-5f-fSM"/> |
|
321 |
- <constraint firstItem="EVY-h5-0pO" firstAttribute="top" secondItem="mae-VW-ed0" secondAttribute="bottom" id="Kg3-vC-Ohr"/> |
|
322 |
- <constraint firstAttribute="trailing" secondItem="mae-VW-ed0" secondAttribute="trailing" id="Qtq-6O-uU3"/> |
|
323 |
- <constraint firstItem="hN9-6g-QCB" firstAttribute="top" secondItem="EVY-h5-0pO" secondAttribute="bottom" id="SCp-cp-eDW"/> |
|
324 |
- <constraint firstItem="hN9-6g-QCB" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="Ufj-Mi-XEY"/> |
|
325 |
- <constraint firstAttribute="trailing" secondItem="hN9-6g-QCB" secondAttribute="trailing" id="YLN-9T-LED"/> |
|
326 |
- <constraint firstItem="mae-VW-ed0" firstAttribute="top" secondItem="bjC-jQ-LOw" secondAttribute="top" id="qXw-XK-Fq0"/> |
|
327 |
- </constraints> |
|
328 |
- </view> |
|
329 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Copyright@pai.ai" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="inH-WZ-fdD"> |
|
330 |
- <rect key="frame" x="146.5" y="649" width="82" height="12"/> |
|
331 |
- <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
332 |
- <fontDescription key="fontDescription" type="system" pointSize="10"/> |
|
333 |
- <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
334 |
- <nil key="highlightedColor"/> |
|
335 |
- </label> |
|
336 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="版本:1.0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bEV-QT-Egq"> |
|
337 |
- <rect key="frame" x="161" y="628.5" width="53" height="14.5"/> |
|
338 |
- <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
339 |
- <fontDescription key="fontDescription" type="system" pointSize="12"/> |
|
340 |
- <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
341 |
- <nil key="highlightedColor"/> |
|
342 |
- </label> |
|
326 |
+ </stackView> |
|
343 | 327 |
</subviews> |
344 | 328 |
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
345 | 329 |
<constraints> |
346 |
- <constraint firstItem="bjC-jQ-LOw" firstAttribute="leading" secondItem="gzV-sh-iNN" secondAttribute="leadingMargin" constant="-20" id="4XL-Mn-Bda"/> |
|
347 |
- <constraint firstAttribute="bottom" secondItem="bjC-jQ-LOw" secondAttribute="bottom" id="7cS-3o-xis"/> |
|
348 |
- <constraint firstItem="bjC-jQ-LOw" firstAttribute="centerX" secondItem="szY-tb-XAT" secondAttribute="centerX" id="B1z-7x-Vdk"/> |
|
349 |
- <constraint firstItem="inH-WZ-fdD" firstAttribute="centerX" secondItem="gzV-sh-iNN" secondAttribute="centerX" id="BGs-5i-uoA"/> |
|
350 |
- <constraint firstItem="bEV-QT-Egq" firstAttribute="centerX" secondItem="gzV-sh-iNN" secondAttribute="centerX" id="CGs-tu-a6G"/> |
|
351 |
- <constraint firstItem="szY-tb-XAT" firstAttribute="bottom" secondItem="inH-WZ-fdD" secondAttribute="bottom" constant="6" id="XIG-RN-kfd"/> |
|
352 |
- <constraint firstItem="bjC-jQ-LOw" firstAttribute="top" secondItem="Str-BX-Lky" secondAttribute="bottom" id="dKZ-iN-vPM"/> |
|
353 |
- <constraint firstItem="szY-tb-XAT" firstAttribute="trailing" secondItem="Str-BX-Lky" secondAttribute="trailing" id="fpg-jU-lLU"/> |
|
354 |
- <constraint firstItem="inH-WZ-fdD" firstAttribute="top" secondItem="bEV-QT-Egq" secondAttribute="bottom" constant="6" id="gQZ-xs-1i5"/> |
|
355 |
- <constraint firstItem="Str-BX-Lky" firstAttribute="top" secondItem="szY-tb-XAT" secondAttribute="top" id="n5h-V7-STS"/> |
|
356 |
- <constraint firstAttribute="trailingMargin" secondItem="bjC-jQ-LOw" secondAttribute="trailing" constant="-20" id="wJd-7K-65L"/> |
|
357 |
- <constraint firstItem="Str-BX-Lky" firstAttribute="leading" secondItem="szY-tb-XAT" secondAttribute="leading" id="x2e-5M-bfE"/> |
|
330 |
+ <constraint firstItem="szY-tb-XAT" firstAttribute="bottom" secondItem="2I3-Nh-YZ5" secondAttribute="bottom" constant="6" id="PzK-nk-5ha"/> |
|
331 |
+ <constraint firstItem="2I3-Nh-YZ5" firstAttribute="leading" secondItem="szY-tb-XAT" secondAttribute="leading" id="juG-cf-sI2"/> |
|
332 |
+ <constraint firstItem="2I3-Nh-YZ5" firstAttribute="top" secondItem="szY-tb-XAT" secondAttribute="top" id="uNF-HK-KAi"/> |
|
333 |
+ <constraint firstAttribute="trailing" secondItem="2I3-Nh-YZ5" secondAttribute="trailing" id="w77-9w-TET"/> |
|
358 | 334 |
</constraints> |
359 | 335 |
<viewLayoutGuide key="safeArea" id="szY-tb-XAT"/> |
360 | 336 |
</view> |
@@ -368,26 +344,26 @@ |
||
368 | 344 |
</viewController> |
369 | 345 |
<placeholder placeholderIdentifier="IBFirstResponder" id="i5Y-H4-CYK" userLabel="First Responder" sceneMemberID="firstResponder"/> |
370 | 346 |
</objects> |
371 |
- <point key="canvasLocation" x="143.19999999999999" y="926.08695652173924"/> |
|
347 |
+ <point key="canvasLocation" x="-444" y="-164"/> |
|
372 | 348 |
</scene> |
373 | 349 |
<!--Mine Order View Controller--> |
374 | 350 |
<scene sceneID="3e4-t5-KsN"> |
375 | 351 |
<objects> |
376 | 352 |
<viewController storyboardIdentifier="MineOrderViewController" automaticallyAdjustsScrollViewInsets="NO" id="Rcb-gY-KGS" customClass="MineOrderViewController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController"> |
377 | 353 |
<view key="view" contentMode="scaleToFill" id="1da-az-lxh"> |
378 |
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> |
|
354 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|
379 | 355 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
380 | 356 |
<subviews> |
381 | 357 |
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="64" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="Ysr-aa-J9R"> |
382 |
- <rect key="frame" x="0.0" y="20" width="320" height="548"/> |
|
358 |
+ <rect key="frame" x="0.0" y="20" width="375" height="647"/> |
|
383 | 359 |
<color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
384 | 360 |
<color key="separatorColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
385 | 361 |
<prototypes> |
386 |
- <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="orderCell" rowHeight="64" id="b9t-RY-ZJI" customClass="OrderCell" customModule="Paiai_iOS" customModuleProvider="target"> |
|
387 |
- <rect key="frame" x="0.0" y="28" width="320" height="64"/> |
|
362 |
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="orderCell" rowHeight="64" id="b9t-RY-ZJI" customClass="OrderCell" customModule="Paiai_iOS" customModuleProvider="target"> |
|
363 |
+ <rect key="frame" x="0.0" y="28" width="375" height="64"/> |
|
388 | 364 |
<autoresizingMask key="autoresizingMask"/> |
389 | 365 |
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="b9t-RY-ZJI" id="90v-hW-Nj2"> |
390 |
- <rect key="frame" x="0.0" y="0.0" width="320" height="63.5"/> |
|
366 |
+ <rect key="frame" x="0.0" y="0.0" width="375" height="63.5"/> |
|
391 | 367 |
<autoresizingMask key="autoresizingMask"/> |
392 | 368 |
<subviews> |
393 | 369 |
<imageView clipsSubviews="YES" userInteractionEnabled="NO" tag="1001" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="默认头像" translatesAutoresizingMaskIntoConstraints="NO" id="PNO-iQ-jhe"> |
@@ -419,7 +395,7 @@ |
||
419 | 395 |
<nil key="highlightedColor"/> |
420 | 396 |
</label> |
421 | 397 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+ 2.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CRI-rc-jfB"> |
422 |
- <rect key="frame" x="216.5" y="24.5" width="36.5" height="14.5"/> |
|
398 |
+ <rect key="frame" x="326.5" y="24.5" width="36.5" height="14.5"/> |
|
423 | 399 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
424 | 400 |
<fontDescription key="fontDescription" type="system" pointSize="12"/> |
425 | 401 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
@@ -470,15 +446,13 @@ |
||
470 | 446 |
<viewLayoutGuide key="safeArea" id="Okl-5b-EeR"/> |
471 | 447 |
</view> |
472 | 448 |
<navigationItem key="navigationItem" id="Lzy-4o-Sr3"/> |
473 |
- <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
|
474 |
- <size key="freeformSize" width="320" height="568"/> |
|
475 | 449 |
<connections> |
476 | 450 |
<outlet property="tableView" destination="Ysr-aa-J9R" id="Yuw-ab-oeJ"/> |
477 | 451 |
</connections> |
478 | 452 |
</viewController> |
479 | 453 |
<placeholder placeholderIdentifier="IBFirstResponder" id="bkE-YW-tfe" sceneMemberID="firstResponder"/> |
480 | 454 |
</objects> |
481 |
- <point key="canvasLocation" x="1656.8" y="-102.54872563718142"/> |
|
455 |
+ <point key="canvasLocation" x="1591" y="-164"/> |
|
482 | 456 |
</scene> |
483 | 457 |
<!--Mine View Controller--> |
484 | 458 |
<scene sceneID="wJG-wy-wnD"> |
@@ -562,7 +536,7 @@ |
||
562 | 536 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uFJ-qP-CrW"> |
563 | 537 |
<rect key="frame" x="0.0" y="0.0" width="300" height="84"/> |
564 | 538 |
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
565 |
- <state key="normal" title="登出" image="注销切图"> |
|
539 |
+ <state key="normal" title="登出" image="BTN-logout"> |
|
566 | 540 |
<color key="titleColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
567 | 541 |
</state> |
568 | 542 |
</button> |
@@ -611,18 +585,18 @@ |
||
611 | 585 |
</viewController> |
612 | 586 |
<placeholder placeholderIdentifier="IBFirstResponder" id="89K-Cu-Ds9" userLabel="First Responder" sceneMemberID="firstResponder"/> |
613 | 587 |
</objects> |
614 |
- <point key="canvasLocation" x="2237.5999999999999" y="-102.09895052473765"/> |
|
588 |
+ <point key="canvasLocation" x="2228" y="-174"/> |
|
615 | 589 |
</scene> |
616 | 590 |
</scenes> |
617 | 591 |
<resources> |
592 |
+ <image name="BTN-logout" width="32" height="32"/> |
|
618 | 593 |
<image name="BTN-send" width="608" height="304"/> |
619 |
- <image name="Logo" width="140" height="140"/> |
|
620 | 594 |
<image name="about-contactUs" width="32" height="32"/> |
621 | 595 |
<image name="about-score" width="32" height="32"/> |
622 | 596 |
<image name="about-userAgreement" width="32" height="32"/> |
623 | 597 |
<image name="list-arrow" width="24" height="36"/> |
598 |
+ <image name="logo" width="140" height="140"/> |
|
624 | 599 |
<image name="navigation-background" width="12" height="132"/> |
625 |
- <image name="注销切图" width="32" height="32"/> |
|
626 | 600 |
<image name="默认头像" width="240" height="240"/> |
627 | 601 |
</resources> |
628 | 602 |
</document> |
@@ -14,7 +14,7 @@ class MineCoordinator: Coordinator { |
||
14 | 14 |
|
15 | 15 |
let mineViewController: MineViewController |
16 | 16 |
let navigationController: UINavigationController |
17 |
- var childCoordinator = [String: Coordinator]() |
|
17 |
+ var childCoordinator = [CoordinatorKey: Coordinator]() |
|
18 | 18 |
// let shareUserInfoViewModel |
19 | 19 |
|
20 | 20 |
init(_ mineViewController: MineViewController, navigationController: UINavigationController) { |
@@ -62,7 +62,7 @@ extension MineCoordinator: MineGroupViewModelDelegate { |
||
62 | 62 |
func didSelect(_ item: GroupItem) { |
63 | 63 |
let coordinator = GroupCoordinator(makeGroupViewController(item: item), |
64 | 64 |
navigationController: navigationController) |
65 |
- childCoordinator["group"] = coordinator |
|
65 |
+ childCoordinator[.group] = coordinator |
|
66 | 66 |
navigationController.pushViewController(coordinator.groupViewController) |
67 | 67 |
} |
68 | 68 |
} |
@@ -14,37 +14,43 @@ import PaiaiUIKit |
||
14 | 14 |
|
15 | 15 |
final class MineFeedbackViewController: UIViewController { |
16 | 16 |
|
17 |
- // MARK: Storyboard property |
|
18 | 17 |
@IBOutlet weak var textView: UITextView! |
19 | 18 |
@IBOutlet weak var sendBtn: UIButton! |
20 |
- fileprivate let disposeBag = DisposeBag() |
|
21 | 19 |
|
20 |
+ fileprivate let disposeBag = DisposeBag() |
|
22 | 21 |
var feedbackAPI: FeedbackRemoteAPI! |
23 | 22 |
|
24 |
- // MARK: view function |
|
25 | 23 |
override func viewDidLoad() { |
26 | 24 |
super.viewDidLoad() |
27 | 25 |
title = "意见反馈" |
28 | 26 |
textView.placeholder = "您的建议是我们前进的动力" |
27 |
+ textView.textContainerInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) |
|
29 | 28 |
bindTextViewToSendBtn() |
30 | 29 |
} |
30 |
+} |
|
31 | 31 |
|
32 |
+/// storyboard button action |
|
33 |
+extension MineFeedbackViewController { |
|
32 | 34 |
@IBAction func sendFeedBack() { |
35 |
+ Toast.showActivity(message: "正在提交") |
|
33 | 36 |
feedbackAPI.submit(text: textView.text).subscribe(onCompleted: {[weak self] in |
34 | 37 |
guard let `self` = self else { return } |
35 |
- self.navigationController?.popViewController(animated: true) |
|
38 |
+ Toast.hide() |
|
36 | 39 |
Toast.show(message: "感谢您的建议") |
37 |
- }) { (error) in |
|
38 |
- |
|
39 |
- }.disposed(by: disposeBag) |
|
40 |
+ self.navigationController?.popViewController(animated: true) |
|
41 |
+ }).disposed(by: disposeBag) |
|
40 | 42 |
} |
43 |
+} |
|
44 |
+ |
|
41 | 45 |
|
46 |
+/// storybaord gesture recognizer action |
|
47 |
+extension MineFeedbackViewController { |
|
42 | 48 |
@IBAction func tap() { |
43 | 49 |
textView.resignFirstResponder() |
44 | 50 |
} |
45 | 51 |
} |
46 | 52 |
|
47 |
-fileprivate extension MineFeedbackViewController { |
|
53 |
+extension MineFeedbackViewController { |
|
48 | 54 |
func bindTextViewToSendBtn() { |
49 | 55 |
textView.rx.text |
50 | 56 |
.map {!($0?.isEmpty)!} |
@@ -26,7 +26,6 @@ final class MineGroupViewController: UIViewController { |
||
26 | 26 |
// MARK: view function |
27 | 27 |
override func viewDidLoad() { |
28 | 28 |
super.viewDidLoad() |
29 |
- |
|
30 | 29 |
setup() |
31 | 30 |
binding() |
32 | 31 |
setNavigationBar() |
@@ -43,7 +42,8 @@ final class MineGroupViewController: UIViewController { |
||
43 | 42 |
|
44 | 43 |
private func setupReloadControl() { |
45 | 44 |
tableView.addPullToRefresh(PullToRefresh()) { |
46 |
- [unowned self] in |
|
45 |
+ [weak self] in |
|
46 |
+ guard let `self` = self else { return } |
|
47 | 47 |
self.viewModel.reload() |
48 | 48 |
} |
49 | 49 |
tableView.startRefreshing(at: .top) |
@@ -51,7 +51,8 @@ final class MineGroupViewController: UIViewController { |
||
51 | 51 |
|
52 | 52 |
private func setupLoadingControl() { |
53 | 53 |
tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { |
54 |
- [unowned self] in |
|
54 |
+ [weak self] in |
|
55 |
+ guard let `self` = self else { return } |
|
55 | 56 |
self.viewModel.preload() |
56 | 57 |
} |
57 | 58 |
} |
@@ -16,24 +16,20 @@ import PullToRefresh |
||
16 | 16 |
|
17 | 17 |
final class MineOrderViewController: UIViewController { |
18 | 18 |
|
19 |
- // MARK: Storyboard property |
|
20 | 19 |
@IBOutlet weak var tableView: UITableView! |
21 | 20 |
|
22 |
- // MARK: data property |
|
23 | 21 |
fileprivate let disposeBag = DisposeBag() |
24 | 22 |
var viewModel: MineOrderViewModel! |
25 | 23 |
|
26 |
- // MARK: view function |
|
27 | 24 |
override func viewDidLoad() { |
28 | 25 |
super.viewDidLoad() |
29 |
- |
|
30 | 26 |
setup() |
31 | 27 |
binding() |
32 | 28 |
setNavigationBar() |
33 | 29 |
} |
34 | 30 |
|
35 | 31 |
private func setNavigationBar() { |
36 |
- title = "我的照片群" |
|
32 |
+ title = "订单记录" |
|
37 | 33 |
} |
38 | 34 |
|
39 | 35 |
private func setup() { |
@@ -43,7 +39,8 @@ final class MineOrderViewController: UIViewController { |
||
43 | 39 |
|
44 | 40 |
private func setupReloadControl() { |
45 | 41 |
tableView.addPullToRefresh(PullToRefresh()) { |
46 |
- [unowned self] in |
|
42 |
+ [weak self] in |
|
43 |
+ guard let `self` = self else { return } |
|
47 | 44 |
self.viewModel.reload() |
48 | 45 |
} |
49 | 46 |
tableView.startRefreshing(at: .top) |
@@ -51,17 +48,18 @@ final class MineOrderViewController: UIViewController { |
||
51 | 48 |
|
52 | 49 |
private func setupLoadingControl() { |
53 | 50 |
tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { |
54 |
- [unowned self] in |
|
51 |
+ [weak self] in |
|
52 |
+ guard let `self` = self else { return } |
|
55 | 53 |
self.viewModel.preload() |
56 | 54 |
} |
57 | 55 |
} |
58 | 56 |
} |
59 | 57 |
|
60 |
-/// |
|
58 |
+/// binding UI |
|
61 | 59 |
fileprivate extension MineOrderViewController { |
62 | 60 |
|
63 |
- var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>> { |
|
64 |
- return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>>( |
|
61 |
+ var dataSource: RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>> { |
|
62 |
+ return RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>>( |
|
65 | 63 |
configureCell: { (dataSource, tableView, indexPath, item) in |
66 | 64 |
let cell = tableView.dequeueReusableCell(withIdentifier: "orderCell", for: indexPath) as! OrderCell |
67 | 65 |
cell.setInfo(item) |
@@ -59,7 +59,7 @@ |
||
59 | 59 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qGY-qB-XSl"> |
60 | 60 |
<rect key="frame" x="0.0" y="301" width="266" height="32"/> |
61 | 61 |
<subviews> |
62 |
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-赞" translatesAutoresizingMaskIntoConstraints="NO" id="UY4-Qk-Rt9"> |
|
62 |
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-thumbup" translatesAutoresizingMaskIntoConstraints="NO" id="UY4-Qk-Rt9"> |
|
63 | 63 |
<rect key="frame" x="8" y="-2" width="36" height="36"/> |
64 | 64 |
</imageView> |
65 | 65 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vth-es-l5X"> |
@@ -68,7 +68,7 @@ |
||
68 | 68 |
<color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
69 | 69 |
<nil key="highlightedColor"/> |
70 | 70 |
</label> |
71 |
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-评论" translatesAutoresizingMaskIntoConstraints="NO" id="31M-cU-gad"> |
|
71 |
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-comment" translatesAutoresizingMaskIntoConstraints="NO" id="31M-cU-gad"> |
|
72 | 72 |
<rect key="frame" x="64.5" y="-2" width="36" height="36"/> |
73 | 73 |
</imageView> |
74 | 74 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="koM-0x-z5o"> |
@@ -119,7 +119,7 @@ |
||
119 | 119 |
</collectionViewCell> |
120 | 120 |
</objects> |
121 | 121 |
<resources> |
122 |
- <image name="icon-评论" width="36" height="36"/> |
|
123 |
- <image name="icon-赞" width="36" height="36"/> |
|
122 |
+ <image name="icon-comment" width="36" height="36"/> |
|
123 |
+ <image name="icon-thumbup" width="36" height="36"/> |
|
124 | 124 |
</resources> |
125 | 125 |
</document> |
@@ -63,7 +63,7 @@ |
||
63 | 63 |
<color key="textColor" red="0.98431372549999996" green="0.31372549020000001" blue="0.31372549020000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
64 | 64 |
<nil key="highlightedColor"/> |
65 | 65 |
</label> |
66 |
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="进入群" translatesAutoresizingMaskIntoConstraints="NO" id="70o-zv-I0l"> |
|
66 |
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BTN-enterGroup" translatesAutoresizingMaskIntoConstraints="NO" id="70o-zv-I0l"> |
|
67 | 67 |
<rect key="frame" x="9" y="11.5" width="60" height="25"/> |
68 | 68 |
<constraints> |
69 | 69 |
<constraint firstAttribute="height" constant="25" id="X8l-P5-3Rd"/> |
@@ -421,13 +421,12 @@ |
||
421 | 421 |
</userDefinedRuntimeAttribute> |
422 | 422 |
</userDefinedRuntimeAttributes> |
423 | 423 |
</textField> |
424 |
- <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oef-gW-sEK"> |
|
424 |
+ <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oef-gW-sEK"> |
|
425 | 425 |
<rect key="frame" x="303" y="10" width="60" height="36"/> |
426 |
- <color key="backgroundColor" red="0.9995151162147522" green="0.16799759864807129" blue="0.24112263321876526" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
427 | 426 |
<constraints> |
428 | 427 |
<constraint firstAttribute="width" constant="60" id="lDb-Za-vrb"/> |
429 | 428 |
</constraints> |
430 |
- <state key="normal" title="发表"> |
|
429 |
+ <state key="normal" title="发表" backgroundImage="BTN-send"> |
|
431 | 430 |
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
432 | 431 |
</state> |
433 | 432 |
<connections> |
@@ -460,7 +459,7 @@ |
||
460 | 459 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lCw-zE-NnH"> |
461 | 460 |
<rect key="frame" x="0.0" y="0.0" width="375" height="48"/> |
462 | 461 |
<subviews> |
463 |
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="购买-去水印" translatesAutoresizingMaskIntoConstraints="NO" id="pvN-rn-4Jn"> |
|
462 |
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-purchase-watermark" translatesAutoresizingMaskIntoConstraints="NO" id="pvN-rn-4Jn"> |
|
464 | 463 |
<rect key="frame" x="123.5" y="0.0" width="48" height="48"/> |
465 | 464 |
<constraints> |
466 | 465 |
<constraint firstAttribute="height" constant="48" id="2VC-Nk-MXl"/> |
@@ -514,6 +513,9 @@ |
||
514 | 513 |
<constraint firstItem="M7B-fx-M7f" firstAttribute="leading" secondItem="9gv-8b-ehH" secondAttribute="leading" id="svX-zh-yc8"/> |
515 | 514 |
</constraints> |
516 | 515 |
<viewLayoutGuide key="safeArea" id="9gv-8b-ehH"/> |
516 |
+ <connections> |
|
517 |
+ <outletCollection property="gestureRecognizers" destination="bqM-7G-5Nw" appends="YES" id="9Q0-1V-Lwz"/> |
|
518 |
+ </connections> |
|
517 | 519 |
</view> |
518 | 520 |
<size key="freeformSize" width="375" height="1000"/> |
519 | 521 |
<connections> |
@@ -527,6 +529,7 @@ |
||
527 | 529 |
<outlet property="enterGroupView" destination="gSr-Cm-y1W" id="bNT-Z4-eOG"/> |
528 | 530 |
<outlet property="groupAvatar" destination="nng-M9-7cj" id="Y42-Tc-QnV"/> |
529 | 531 |
<outlet property="groupName" destination="XM7-FX-tOk" id="ifP-h1-72j"/> |
532 |
+ <outlet property="keyboardGestureRcognizer" destination="bqM-7G-5Nw" id="uUS-Ox-osk"/> |
|
530 | 533 |
<outlet property="photoCollectionView" destination="dtf-M8-otl" id="VlY-wa-ekc"/> |
531 | 534 |
<outlet property="photoTime" destination="QpI-Mp-URP" id="rJM-TG-fZW"/> |
532 | 535 |
<outlet property="sendBtn" destination="oef-gW-sEK" id="3RV-uD-3q1"/> |
@@ -541,12 +544,17 @@ |
||
541 | 544 |
</connections> |
542 | 545 |
</viewController> |
543 | 546 |
<placeholder placeholderIdentifier="IBFirstResponder" id="MFn-pn-5Jb" userLabel="First Responder" sceneMemberID="firstResponder"/> |
544 |
- <tapGestureRecognizer id="thN-TP-atT" userLabel="purchaseGestureRecognizer"> |
|
547 |
+ <tapGestureRecognizer enabled="NO" id="bqM-7G-5Nw" userLabel="keyboard Gesture Recognizer"> |
|
548 |
+ <connections> |
|
549 |
+ <action selector="recyclingKeyboard:" destination="qsT-Pc-Bhh" id="BWK-9f-gfv"/> |
|
550 |
+ </connections> |
|
551 |
+ </tapGestureRecognizer> |
|
552 |
+ <tapGestureRecognizer id="thN-TP-atT" userLabel="purchase Gesture Recognizer"> |
|
545 | 553 |
<connections> |
546 | 554 |
<action selector="purchase:" destination="qsT-Pc-Bhh" id="qjs-Ot-XwA"/> |
547 | 555 |
</connections> |
548 | 556 |
</tapGestureRecognizer> |
549 |
- <tapGestureRecognizer id="EHE-XX-kIE" userLabel="enterGroupGestureRecognizer"> |
|
557 |
+ <tapGestureRecognizer id="EHE-XX-kIE" userLabel="enter Group Gesture Recognizer"> |
|
550 | 558 |
<connections> |
551 | 559 |
<action selector="enterGroup:" destination="qsT-Pc-Bhh" id="dZE-ok-iUM"/> |
552 | 560 |
</connections> |
@@ -554,122 +562,146 @@ |
||
554 | 562 |
</objects> |
555 | 563 |
<point key="canvasLocation" x="-1452" y="1137.9310344827586"/> |
556 | 564 |
</scene> |
557 |
- <!--ShareController--> |
|
565 |
+ <!--Share View Controller--> |
|
558 | 566 |
<scene sceneID="UTe-rv-qoO"> |
559 | 567 |
<objects> |
560 |
- <viewController storyboardIdentifier="ShareController" automaticallyAdjustsScrollViewInsets="NO" id="KnW-jg-4H5" userLabel="ShareController" customClass="ShareController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController"> |
|
568 |
+ <viewController storyboardIdentifier="ShareViewController" automaticallyAdjustsScrollViewInsets="NO" id="KnW-jg-4H5" customClass="ShareViewController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController"> |
|
561 | 569 |
<view key="view" contentMode="scaleToFill" id="rN5-Zb-vwm"> |
562 | 570 |
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
563 | 571 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
564 | 572 |
<subviews> |
565 |
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xUW-ue-yp5"> |
|
573 |
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="edT-EA-xhZ" userLabel="Share View"> |
|
566 | 574 |
<rect key="frame" x="0.0" y="463" width="375" height="77"/> |
567 | 575 |
<subviews> |
568 |
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qpb-ag-Zb8"> |
|
569 |
- <rect key="frame" x="30.5" y="0.0" width="54" height="54"/> |
|
576 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="itC-HJ-ZaT" userLabel="circle"> |
|
577 |
+ <rect key="frame" x="30.5" y="0.0" width="54" height="71"/> |
|
578 |
+ <subviews> |
|
579 |
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yKG-rx-pgX"> |
|
580 |
+ <rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
|
581 |
+ <constraints> |
|
582 |
+ <constraint firstAttribute="width" constant="54" id="CuL-Dq-ZdA"/> |
|
583 |
+ <constraint firstAttribute="height" constant="54" id="N1z-wg-bWj"/> |
|
584 |
+ </constraints> |
|
585 |
+ <state key="normal" image="share-wxCircle"/> |
|
586 |
+ <connections> |
|
587 |
+ <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="l8P-Cd-0ds"/> |
|
588 |
+ </connections> |
|
589 |
+ </button> |
|
590 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="朋友圈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3pg-qO-r4l"> |
|
591 |
+ <rect key="frame" x="5.5" y="54" width="43" height="17"/> |
|
592 |
+ <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
593 |
+ <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
594 |
+ <nil key="highlightedColor"/> |
|
595 |
+ </label> |
|
596 |
+ </subviews> |
|
570 | 597 |
<constraints> |
571 |
- <constraint firstAttribute="height" constant="54" id="1zd-z7-bRA"/> |
|
572 |
- <constraint firstAttribute="width" constant="54" id="la0-N0-BGD"/> |
|
598 |
+ <constraint firstAttribute="width" constant="54" id="7c7-Ce-enL"/> |
|
573 | 599 |
</constraints> |
574 |
- <state key="normal" image="分享-朋友圈"/> |
|
575 |
- <connections> |
|
576 |
- <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="3as-uU-Hcb"/> |
|
577 |
- </connections> |
|
578 |
- </button> |
|
579 |
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6ux-OL-8wy"> |
|
580 |
- <rect key="frame" x="117" y="0.0" width="54" height="54"/> |
|
600 |
+ </stackView> |
|
601 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="W6V-MR-s2s" userLabel="weixin"> |
|
602 |
+ <rect key="frame" x="117" y="0.0" width="54" height="71"/> |
|
603 |
+ <subviews> |
|
604 |
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WHf-tp-9sX"> |
|
605 |
+ <rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
|
606 |
+ <constraints> |
|
607 |
+ <constraint firstAttribute="height" constant="54" id="VCa-wM-G0W"/> |
|
608 |
+ <constraint firstAttribute="width" constant="54" id="bOu-A0-deg"/> |
|
609 |
+ </constraints> |
|
610 |
+ <state key="normal" image="share-wx"/> |
|
611 |
+ <connections> |
|
612 |
+ <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="HIE-st-eD9"/> |
|
613 |
+ </connections> |
|
614 |
+ </button> |
|
615 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ju7-a4-MAb" userLabel="微信"> |
|
616 |
+ <rect key="frame" x="12.5" y="54" width="29" height="17"/> |
|
617 |
+ <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
618 |
+ <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
619 |
+ <nil key="highlightedColor"/> |
|
620 |
+ </label> |
|
621 |
+ </subviews> |
|
581 | 622 |
<constraints> |
582 |
- <constraint firstAttribute="width" constant="54" id="5X9-C3-GLj"/> |
|
583 |
- <constraint firstAttribute="height" constant="54" id="8b9-pJ-MY4"/> |
|
623 |
+ <constraint firstAttribute="width" constant="54" id="U1a-2q-73r"/> |
|
584 | 624 |
</constraints> |
585 |
- <state key="normal" image="分享-微信好友"/> |
|
586 |
- <connections> |
|
587 |
- <action selector="shareToWei" destination="KnW-jg-4H5" eventType="touchUpInside" id="6Sc-0e-z9l"/> |
|
588 |
- </connections> |
|
589 |
- </button> |
|
590 |
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x2h-L3-H9s"> |
|
591 |
- <rect key="frame" x="285.5" y="0.0" width="54" height="54"/> |
|
625 |
+ </stackView> |
|
626 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="KU1-aO-nLf" userLabel="QQ"> |
|
627 |
+ <rect key="frame" x="202" y="0.0" width="54" height="71"/> |
|
628 |
+ <subviews> |
|
629 |
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgp-ou-XXF"> |
|
630 |
+ <rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
|
631 |
+ <constraints> |
|
632 |
+ <constraint firstAttribute="width" constant="54" id="HIs-RN-iJa"/> |
|
633 |
+ <constraint firstAttribute="height" constant="54" id="sjs-5I-q9G"/> |
|
634 |
+ </constraints> |
|
635 |
+ <state key="normal" image="share-QQ"/> |
|
636 |
+ <connections> |
|
637 |
+ <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="uxZ-de-KlE"/> |
|
638 |
+ </connections> |
|
639 |
+ </button> |
|
640 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="QQ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cQk-kV-x1B" userLabel="QQ"> |
|
641 |
+ <rect key="frame" x="16.5" y="54" width="21.5" height="17"/> |
|
642 |
+ <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
643 |
+ <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
644 |
+ <nil key="highlightedColor"/> |
|
645 |
+ </label> |
|
646 |
+ </subviews> |
|
592 | 647 |
<constraints> |
593 |
- <constraint firstAttribute="width" constant="54" id="JUP-IW-DiC"/> |
|
594 |
- <constraint firstAttribute="height" constant="54" id="xGJ-At-rzn"/> |
|
648 |
+ <constraint firstAttribute="width" constant="54" id="Meq-Td-X06"/> |
|
595 | 649 |
</constraints> |
596 |
- <state key="normal" image="分享-微博"/> |
|
597 |
- <connections> |
|
598 |
- <action selector="shareToWeibo" destination="KnW-jg-4H5" eventType="touchUpInside" id="VYj-hh-MyW"/> |
|
599 |
- </connections> |
|
600 |
- </button> |
|
601 |
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yqF-ZW-9kd"> |
|
602 |
- <rect key="frame" x="202" y="0.0" width="54" height="54"/> |
|
650 |
+ </stackView> |
|
651 |
+ <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="ZLk-gf-Jzh" userLabel="weibo"> |
|
652 |
+ <rect key="frame" x="285.5" y="0.0" width="54" height="71"/> |
|
653 |
+ <subviews> |
|
654 |
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uCq-aJ-DOY"> |
|
655 |
+ <rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
|
656 |
+ <constraints> |
|
657 |
+ <constraint firstAttribute="width" constant="54" id="9PQ-od-zwh"/> |
|
658 |
+ <constraint firstAttribute="height" constant="54" id="Dd2-ob-7nA"/> |
|
659 |
+ </constraints> |
|
660 |
+ <state key="normal" image="share-weibo"/> |
|
661 |
+ <connections> |
|
662 |
+ <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="inK-7r-8gZ"/> |
|
663 |
+ </connections> |
|
664 |
+ </button> |
|
665 |
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微博" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ycS-qw-cbn" userLabel="微博"> |
|
666 |
+ <rect key="frame" x="12.5" y="54" width="29" height="17"/> |
|
667 |
+ <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
668 |
+ <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
669 |
+ <nil key="highlightedColor"/> |
|
670 |
+ </label> |
|
671 |
+ </subviews> |
|
603 | 672 |
<constraints> |
604 |
- <constraint firstAttribute="height" constant="54" id="3gE-we-sHc"/> |
|
605 |
- <constraint firstAttribute="width" constant="54" id="j1v-So-HZy"/> |
|
673 |
+ <constraint firstAttribute="width" constant="54" id="JRS-hW-4fd"/> |
|
606 | 674 |
</constraints> |
607 |
- <state key="normal" image="分享-QQ"/> |
|
608 |
- <connections> |
|
609 |
- <action selector="shareToQQ" destination="KnW-jg-4H5" eventType="touchUpInside" id="AUu-PL-Vdh"/> |
|
610 |
- </connections> |
|
611 |
- </button> |
|
612 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="朋友圈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nO4-Ve-OiO"> |
|
613 |
- <rect key="frame" x="36" y="60" width="43" height="17"/> |
|
614 |
- <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
615 |
- <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
616 |
- <nil key="highlightedColor"/> |
|
617 |
- </label> |
|
618 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KS7-62-qGm"> |
|
619 |
- <rect key="frame" x="129.5" y="60" width="29" height="17"/> |
|
620 |
- <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
621 |
- <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
622 |
- <nil key="highlightedColor"/> |
|
623 |
- </label> |
|
624 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="QQ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HHz-QK-Fr2"> |
|
625 |
- <rect key="frame" x="218" y="60" width="22" height="17"/> |
|
626 |
- <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
627 |
- <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
628 |
- <nil key="highlightedColor"/> |
|
629 |
- </label> |
|
630 |
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微博" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xa5-ke-ek6"> |
|
631 |
- <rect key="frame" x="298" y="60" width="29" height="17"/> |
|
632 |
- <fontDescription key="fontDescription" type="system" pointSize="14"/> |
|
633 |
- <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|
634 |
- <nil key="highlightedColor"/> |
|
635 |
- </label> |
|
675 |
+ </stackView> |
|
636 | 676 |
</subviews> |
637 | 677 |
<constraints> |
638 |
- <constraint firstItem="HHz-QK-Fr2" firstAttribute="centerX" secondItem="yqF-ZW-9kd" secondAttribute="centerX" id="7l8-1r-eQh"/> |
|
639 |
- <constraint firstAttribute="bottom" secondItem="HHz-QK-Fr2" secondAttribute="bottom" id="FSC-Ek-9t8"/> |
|
640 |
- <constraint firstItem="yqF-ZW-9kd" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="KPI-J0-KS4"/> |
|
641 |
- <constraint firstItem="xa5-ke-ek6" firstAttribute="centerX" secondItem="x2h-L3-H9s" secondAttribute="centerX" id="M27-U4-Q3M"/> |
|
642 |
- <constraint firstAttribute="height" constant="77" id="N2d-i8-gd3"/> |
|
643 |
- <constraint firstItem="yqF-ZW-9kd" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="220:180" id="NbH-9w-UIS"/> |
|
644 |
- <constraint firstAttribute="bottom" secondItem="KS7-62-qGm" secondAttribute="bottom" id="PSC-uY-GlG"/> |
|
645 |
- <constraint firstItem="x2h-L3-H9s" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="X1L-d4-RO3"/> |
|
646 |
- <constraint firstItem="qpb-ag-Zb8" firstAttribute="top" secondItem="xUW-ue-yp5" secondAttribute="top" id="Xhp-xq-TAQ"/> |
|
647 |
- <constraint firstItem="6ux-OL-8wy" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="138:180" id="b7V-Ap-t1L"/> |
|
648 |
- <constraint firstAttribute="bottom" secondItem="nO4-Ve-OiO" secondAttribute="bottom" id="dJP-qK-Tlu"/> |
|
649 |
- <constraint firstItem="KS7-62-qGm" firstAttribute="centerX" secondItem="6ux-OL-8wy" secondAttribute="centerX" id="eHD-Mp-ViT"/> |
|
650 |
- <constraint firstItem="nO4-Ve-OiO" firstAttribute="centerX" secondItem="qpb-ag-Zb8" secondAttribute="centerX" id="gw3-SW-dNJ"/> |
|
651 |
- <constraint firstItem="x2h-L3-H9s" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="300:180" id="rbh-jj-rpj"/> |
|
652 |
- <constraint firstItem="qpb-ag-Zb8" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="55:180" id="sWn-3o-xfe"/> |
|
653 |
- <constraint firstAttribute="bottom" secondItem="xa5-ke-ek6" secondAttribute="bottom" id="uCt-id-dos"/> |
|
654 |
- <constraint firstItem="6ux-OL-8wy" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="xcU-1M-cr8"/> |
|
678 |
+ <constraint firstItem="KU1-aO-nLf" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="2U4-8e-O3g"/> |
|
679 |
+ <constraint firstItem="ZLk-gf-Jzh" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="300:180" id="3Kp-5r-ImR"/> |
|
680 |
+ <constraint firstItem="itC-HJ-ZaT" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="55:180" id="7D5-Uy-aAS"/> |
|
681 |
+ <constraint firstItem="W6V-MR-s2s" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="B2o-vs-NbY"/> |
|
682 |
+ <constraint firstItem="KU1-aO-nLf" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="220:180" id="HbQ-Ef-QBp"/> |
|
683 |
+ <constraint firstItem="ZLk-gf-Jzh" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="NSS-yv-eAq"/> |
|
684 |
+ <constraint firstItem="itC-HJ-ZaT" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="fRA-ze-0tQ"/> |
|
685 |
+ <constraint firstAttribute="height" constant="77" id="q4w-sh-fN4"/> |
|
686 |
+ <constraint firstItem="W6V-MR-s2s" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="138:180" id="tOg-mT-rNp"/> |
|
655 | 687 |
</constraints> |
656 | 688 |
</view> |
657 | 689 |
</subviews> |
658 | 690 |
<gestureRecognizers/> |
659 | 691 |
<constraints> |
660 |
- <constraint firstItem="xUW-ue-yp5" firstAttribute="leading" secondItem="C6P-7J-fWs" secondAttribute="leading" id="Afy-jR-Jec"/> |
|
661 |
- <constraint firstItem="C6P-7J-fWs" firstAttribute="bottom" secondItem="xUW-ue-yp5" secondAttribute="bottom" constant="127" id="hco-RD-Kle"/> |
|
662 |
- <constraint firstItem="C6P-7J-fWs" firstAttribute="trailing" secondItem="xUW-ue-yp5" secondAttribute="trailing" id="lAd-Wf-RcE"/> |
|
692 |
+ <constraint firstItem="edT-EA-xhZ" firstAttribute="trailing" secondItem="C6P-7J-fWs" secondAttribute="trailing" id="6h4-ug-H2a"/> |
|
693 |
+ <constraint firstItem="edT-EA-xhZ" firstAttribute="leading" secondItem="C6P-7J-fWs" secondAttribute="leading" id="RS3-mc-Bi6"/> |
|
694 |
+ <constraint firstItem="C6P-7J-fWs" firstAttribute="bottom" secondItem="edT-EA-xhZ" secondAttribute="bottom" constant="127" id="iF3-AG-M9e"/> |
|
663 | 695 |
</constraints> |
664 | 696 |
<viewLayoutGuide key="safeArea" id="C6P-7J-fWs"/> |
665 | 697 |
</view> |
666 | 698 |
<connections> |
667 |
- <outlet property="shareView" destination="xUW-ue-yp5" id="I5g-Zk-9uW"/> |
|
699 |
+ <outlet property="shareView" destination="edT-EA-xhZ" id="DNu-Ue-V2y"/> |
|
668 | 700 |
</connections> |
669 | 701 |
</viewController> |
670 | 702 |
<placeholder placeholderIdentifier="IBFirstResponder" id="9LO-35-FRH" userLabel="First Responder" sceneMemberID="firstResponder"/> |
671 | 703 |
</objects> |
672 |
- <point key="canvasLocation" x="-513" y="1287"/> |
|
704 |
+ <point key="canvasLocation" x="-73" y="469"/> |
|
673 | 705 |
</scene> |
674 | 706 |
<!--PhotoPreviewViewController--> |
675 | 707 |
<scene sceneID="yhk-2u-fiu"> |
@@ -779,20 +811,21 @@ |
||
779 | 811 |
<resources> |
780 | 812 |
<image name="BTN-comment" width="138" height="138"/> |
781 | 813 |
<image name="BTN-download" width="96" height="96"/> |
814 |
+ <image name="BTN-enterGroup" width="114" height="60"/> |
|
782 | 815 |
<image name="BTN-rotate" width="96" height="96"/> |
816 |
+ <image name="BTN-send" width="608" height="304"/> |
|
783 | 817 |
<image name="BTN-share" width="138" height="138"/> |
784 | 818 |
<image name="BTN-thumbup" width="192" height="192"/> |
785 | 819 |
<image name="defaultAvatar" width="240" height="240"/> |
786 | 820 |
<image name="icon-comment" width="36" height="36"/> |
821 |
+ <image name="icon-purchase-watermark" width="96" height="96"/> |
|
787 | 822 |
<image name="icon-thumbup" width="36" height="36"/> |
788 | 823 |
<image name="icon-time" width="36" height="36"/> |
789 | 824 |
<image name="list-arrow" width="24" height="36"/> |
790 | 825 |
<image name="navigation-back" width="36" height="72"/> |
791 |
- <image name="分享-QQ" width="162" height="162"/> |
|
792 |
- <image name="分享-微信好友" width="162" height="162"/> |
|
793 |
- <image name="分享-微博" width="162" height="162"/> |
|
794 |
- <image name="分享-朋友圈" width="162" height="162"/> |
|
795 |
- <image name="购买-去水印" width="96" height="96"/> |
|
796 |
- <image name="进入群" width="114" height="60"/> |
|
826 |
+ <image name="share-QQ" width="162" height="162"/> |
|
827 |
+ <image name="share-weibo" width="162" height="162"/> |
|
828 |
+ <image name="share-wx" width="162" height="162"/> |
|
829 |
+ <image name="share-wxCircle" width="162" height="162"/> |
|
797 | 830 |
</resources> |
798 | 831 |
</document> |
@@ -14,7 +14,7 @@ final class PhotoDetailCoordinator: Coordinator { |
||
14 | 14 |
let photoDetailViewController: PhotoDetailViewController |
15 | 15 |
let shareListViewModel: PhotoDetailListViewModel |
16 | 16 |
|
17 |
- fileprivate var coordinators = [String: Coordinator]() |
|
17 |
+ fileprivate var coordinators = [CoordinatorKey: Coordinator]() |
|
18 | 18 |
|
19 | 19 |
init(_ photoDetailVC: PhotoDetailViewController, |
20 | 20 |
nav: UINavigationController, |
@@ -42,7 +42,7 @@ extension PhotoDetailCoordinator: PhotoDetailViewModelDelegate { |
||
42 | 42 |
vc.viewModel = GroupViewModel(groupItem: item) |
43 | 43 |
let coordinator = GroupCoordinator(vc, |
44 | 44 |
navigationController: navigationController) |
45 |
- coordinators["group"] = coordinator |
|
45 |
+ coordinators[.group] = coordinator |
|
46 | 46 |
|
47 | 47 |
navigationController.pushViewController(vc) |
48 | 48 |
} |
@@ -44,6 +44,7 @@ final class PhotoDetailViewController: UIViewController { |
||
44 | 44 |
@IBOutlet weak var waterMarkImage: UIImageView! |
45 | 45 |
@IBOutlet weak var waterMarkLabel: UILabel! |
46 | 46 |
|
47 |
+ @IBOutlet var keyboardGestureRcognizer: UITapGestureRecognizer! |
|
47 | 48 |
@IBOutlet weak var thumbupViewHeightConstraint: NSLayoutConstraint! |
48 | 49 |
@IBOutlet weak var commentEditYConstraint: NSLayoutConstraint! |
49 | 50 |
|
@@ -56,6 +57,7 @@ final class PhotoDetailViewController: UIViewController { |
||
56 | 57 |
// MARK: view function |
57 | 58 |
override func viewDidLoad() { |
58 | 59 |
super.viewDidLoad() |
60 |
+ title = "详情" |
|
59 | 61 |
binding() |
60 | 62 |
setup() |
61 | 63 |
} |
@@ -80,19 +82,13 @@ final class PhotoDetailViewController: UIViewController { |
||
80 | 82 |
} |
81 | 83 |
} |
82 | 84 |
|
83 |
-//MARK textField delegate |
|
84 |
-extension PhotoDetailViewController: UIGestureRecognizerDelegate { |
|
85 |
- // MARK: textField |
|
86 |
- |
|
87 |
- func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { |
|
88 |
- return commentTextField.isFirstResponder |
|
89 |
- } |
|
90 |
- |
|
91 |
-} |
|
92 |
- |
|
93 |
- |
|
94 | 85 |
/// bind storyboard gesture action |
95 | 86 |
extension PhotoDetailViewController { |
87 |
+ |
|
88 |
+ @IBAction func recyclingKeyboard(_ sender: UITapGestureRecognizer) { |
|
89 |
+ commentTextField.resignFirstResponder() |
|
90 |
+ } |
|
91 |
+ |
|
96 | 92 |
@IBAction func purchase(_ sender: UITapGestureRecognizer) { |
97 | 93 |
|
98 | 94 |
} |
@@ -105,7 +101,7 @@ extension PhotoDetailViewController { |
||
105 | 101 |
/// bind storyboard button action |
106 | 102 |
extension PhotoDetailViewController { |
107 | 103 |
@IBAction func share() { |
108 |
- let ctl = UIStoryboard.photoDetail.instantiateController(ShareController.self) |
|
104 |
+ let ctl = UIStoryboard.photoDetail.instantiateController(ShareViewController.self) |
|
109 | 105 |
ctl.shareContent = "我使用拍爱分享了一张美图,你也快来试试吧" |
110 | 106 |
// ctl.shareImgUrlThumb = datas[currentPhotoIndex].photo_thumbnail_url |
111 | 107 |
// ctl.shareUrl = datas[currentPhotoIndex].photo_share_url |
@@ -283,6 +279,9 @@ extension PhotoDetailViewController { |
||
283 | 279 |
.notification(UIResponder.keyboardWillShowNotification) |
284 | 280 |
.takeUntil(self.rx.deallocated) |
285 | 281 |
.subscribe { [unowned self] notification in |
282 |
+ |
|
283 |
+ self.keyboardGestureRcognizer.isEnabled = true |
|
284 |
+ |
|
286 | 285 |
guard let userInfo = notification.element?.userInfo, |
287 | 286 |
let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect, |
288 | 287 |
let timeInterval = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval, |
@@ -301,6 +300,8 @@ extension PhotoDetailViewController { |
||
301 | 300 |
.notification(UIResponder.keyboardWillHideNotification) |
302 | 301 |
.takeUntil(self.rx.deallocated) |
303 | 302 |
.subscribe { [unowned self] notification in |
303 |
+ self.keyboardGestureRcognizer.isEnabled = false |
|
304 |
+ |
|
304 | 305 |
guard let userInfo = notification.element?.userInfo, |
305 | 306 |
let timeInterval = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval, |
306 | 307 |
let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? Int |
@@ -1,5 +1,5 @@ |
||
1 | 1 |
// |
2 |
-// ShareController.swift |
|
2 |
+// ShareViewController.swift |
|
3 | 3 |
// PaiAi |
4 | 4 |
// |
5 | 5 |
// Created by zhengjianfei on 16/4/7. |
@@ -10,24 +10,24 @@ import UIKit |
||
10 | 10 |
import PaiaiDataKit |
11 | 11 |
import PaiaiUIKit |
12 | 12 |
|
13 |
-final class ShareController: UIViewController { |
|
13 |
+final class ShareViewController: AlertViewController { |
|
14 | 14 |
|
15 |
- // MARK: Storyboard property |
|
16 | 15 |
@IBOutlet weak var shareView: UIView! |
17 |
- |
|
16 |
+ |
|
17 |
+ override var animationView: UIView? { |
|
18 |
+ return shareView |
|
19 |
+ } |
|
20 |
+ |
|
21 |
+ override var style: AlertViewController.Style { |
|
22 |
+ return .actionSheet |
|
23 |
+ } |
|
24 |
+ |
|
18 | 25 |
// MARK: parameter property |
19 | 26 |
var shareContent: String = "" |
20 | 27 |
var shareImg: UIImage? |
21 | 28 |
lazy var shareImgUrlThumb: String = "" |
22 | 29 |
lazy var shareUrl: String = "" |
23 |
-// let transitioning = FFTransitioning(alertStyle: .actionSheet) |
|
24 |
- |
|
25 |
- required init?(coder aDecoder: NSCoder) { |
|
26 |
- super.init(coder: aDecoder) |
|
27 |
-// transitioningDelegate = transitioning |
|
28 |
- } |
|
29 |
- |
|
30 |
- // MARK: view function |
|
30 |
+ |
|
31 | 31 |
override func viewDidLoad() { |
32 | 32 |
super.viewDidLoad() |
33 | 33 |
let imageView = UIImageView() |
@@ -1,29 +0,0 @@ |
||
1 |
-// |
|
2 |
-// ShareView.swift |
|
3 |
-// Paiai_iOS |
|
4 |
-// |
|
5 |
-// Created by ffib on 2019/3/21. |
|
6 |
-// Copyright © 2019 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-class ShareView: UIView { |
|
12 |
- |
|
13 |
-} |
|
14 |
- |
|
15 |
- |
|
16 |
- |
|
17 |
-extension ShareView { |
|
18 |
- |
|
19 |
- func activateConstraints() { |
|
20 |
- |
|
21 |
- } |
|
22 |
- |
|
23 |
- func activateConstraintsShareView() { |
|
24 |
- guard let superView = superview else { return } |
|
25 |
- |
|
26 |
- self.translatesAutoresizingMaskIntoConstraints = false |
|
27 |
- |
|
28 |
- } |
|
29 |
-} |