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