ld">
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
|
|
-}
|