optimize navigaionBar

FFIB 6 年之前
父节点
当前提交
80c754a6f9
共有 26 个文件被更改,包括 429 次插入446 次删除
  1. 二进制
      PaiAi/.DS_Store
  2. 33 63
      PaiAi/Paiai.xcodeproj/project.pbxproj
  3. 二进制
      PaiAi/Paiai.xcodeproj/project.xcworkspace/xcuserdata/FFIB.xcuserdatad/UserInterfaceState.xcuserstate
  4. 12 0
      PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  5. 5 5
      PaiAi/Paiai/AppDelegate.swift
  6. 6 6
      PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/Reusable/NetWork/NetWorkCache.swift
  7. 3 3
      PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/WXUserInfoRemoteAPI.swift
  8. 二进制
      PaiAi/PaiaiUIKit/Reusable/UIKit/.DS_Store
  9. 0 24
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/GestureRecoginzier+NavigationBack.swift
  10. 3 4
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/NavigationBackDelegate.swift
  11. 0 12
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/NavigationBackViewController.swift
  12. 16 0
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/UINavigationController + NavigationBack.swift
  13. 0 18
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/UINavigationController+NavigationBack.swift
  14. 0 77
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInOutAnimator.swift
  15. 0 63
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInteractivePopDeletegate.swift
  16. 0 12
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInteractiveViewController.swift
  17. 0 49
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarPushAndPopDelegate.swift
  18. 233 0
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationController/NavigationBar.swift
  19. 100 18
      PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationController/NavigationController.swift
  20. 8 30
      PaiAi/PaiaiUIKit/Reusable/UIKit/PageViewController/PageViewController.swift
  21. 0 1
      PaiAi/Paiai_iOS/App/Group/GroupDetail/GroupNameModificationViewController.swift
  22. 6 19
      PaiAi/Paiai_iOS/App/Group/GroupViewController.swift
  23. 3 2
      PaiAi/Paiai_iOS/App/Home/ScanQRViewController.swift
  24. 1 14
      PaiAi/Paiai_iOS/App/Message/MessageListViewController.swift
  25. 0 13
      PaiAi/Paiai_iOS/App/Mine/MineGroupViewController.swift
  26. 0 13
      PaiAi/Paiai_iOS/App/Mine/MineOrderViewController.swift

二进制
PaiAi/.DS_Store


+ 33 - 63
PaiAi/Paiai.xcodeproj/project.pbxproj

@@ -8,7 +8,7 @@
8 8
 
9 9
 /* Begin PBXBuildFile section */
10 10
 		0500C25E21E72E45009A7013 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
11
-		0500C26521E8644E009A7013 /* NavigationBackDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0500C26421E8644E009A7013 /* NavigationBackDelegate.swift */; };
11
+		0500C26521E8644E009A7013 /* NavigationBackItemDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0500C26421E8644E009A7013 /* NavigationBackItemDelegate.swift */; };
12 12
 		0505ACF921DF104500404071 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACF821DF104500404071 /* SystemConfiguration.framework */; };
13 13
 		0505ACFB21DF106000404071 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFA21DF106000404071 /* libsqlite3.0.tbd */; };
14 14
 		0505ACFD21DF106F00404071 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFC21DF106E00404071 /* libc++.tbd */; };
@@ -38,7 +38,6 @@
38 38
 		050D719B22531B860076CE06 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719A22531B860076CE06 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
39 39
 		050D719D22531BA60076CE06 /* SQLite.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719C22531BA60076CE06 /* SQLite.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
40 40
 		050D719E22531BBF0076CE06 /* Differentiator.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FBD21CA194B004EF1BE /* Differentiator.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
41
-		050D71A322545D550076CE06 /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050D71A222545D550076CE06 /* NavigationController.swift */; };
42 41
 		05130F4021C94B33004EF1BE /* PaiaiUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 05130F3021C94B32004EF1BE /* PaiaiUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
43 42
 		05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F4F21C94C12004EF1BE /* AlertAnimator.swift */; };
44 43
 		05130F5921C94C12004EF1BE /* AlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F5121C94C12004EF1BE /* AlertViewController.swift */; };
@@ -209,6 +208,7 @@
209 208
 		0584FD7721F9C8A300FA1E3E /* PresentAnimatorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7621F9C8A300FA1E3E /* PresentAnimatorDelegate.swift */; };
210 209
 		0584FD7C21FABC1400FA1E3E /* PresentExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7B21FABC1400FA1E3E /* PresentExtension.swift */; };
211 210
 		0584FD7E21FABD9D00FA1E3E /* PresentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0584FD7D21FABD9D00FA1E3E /* PresentViewController.swift */; };
211
+		058C33EE2272F7BE00A435E9 /* UINavigationController + NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 058C33ED2272F7BE00A435E9 /* UINavigationController + NavigationBack.swift */; };
212 212
 		058D0C9D2249C94F006CA488 /* CoordinatorKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 058D0C9C2249C94F006CA488 /* CoordinatorKey.swift */; };
213 213
 		058D0CA02249FCF6006CA488 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053E126A21F5696E00A64893 /* Toast.swift */; };
214 214
 		058D0CA12249FCF6006CA488 /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0521145321F083F20047C55A /* ToastView.swift */; };
@@ -219,6 +219,7 @@
219 219
 		059B58A621F7235D00FA64C2 /* AlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B58A521F7235D00FA64C2 /* AlertAction.swift */; };
220 220
 		059B58A821F83B1600FA64C2 /* CenterCancelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B58A721F83B1600FA64C2 /* CenterCancelItem.swift */; };
221 221
 		059B58AA21F83B2E00FA64C2 /* CenterConfirmItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059B58A921F83B2E00FA64C2 /* CenterConfirmItem.swift */; };
222
+		05AF61BF226EFAF700AD8E2F /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05AF61BE226EFAF700AD8E2F /* NavigationBar.swift */; };
222 223
 		05B2C5EF21D48133008063B3 /* HomeRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C5EE21D48133008063B3 /* HomeRemoteAPI.swift */; };
223 224
 		05B2C60621D60E97008063B3 /* DictionaryExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C60521D60E97008063B3 /* DictionaryExt.swift */; };
224 225
 		05B2C61D21D710C5008063B3 /* GroupRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C61C21D710C5008063B3 /* GroupRemoteAPI.swift */; };
@@ -241,22 +242,16 @@
241 242
 		05C71C0821DDBD55003E7CEE /* JSONCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C71C0721DDBD55003E7CEE /* JSONCode.swift */; };
242 243
 		05C8D21021ED7B280001E847 /* UIApplication+Swizzle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D20F21ED7B270001E847 /* UIApplication+Swizzle.swift */; };
243 244
 		05C8D21221ED7B620001E847 /* UINavigationBar+FixSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21121ED7B620001E847 /* UINavigationBar+FixSpace.swift */; };
244
-		05C8D21421ED8B9B0001E847 /* NavigationBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */; };
245
-		05C8D21921ED985C0001E847 /* UINavigationController+NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */; };
246 245
 		05C8D21B21ED9A020001E847 /* UIViewController+Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21A21ED9A020001E847 /* UIViewController+Navigation.swift */; };
247
-		05C8D21D21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21C21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift */; };
248
-		05C8D22021EDD5F50001E847 /* NavigationBarInOutAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21F21EDD5F50001E847 /* NavigationBarInOutAnimator.swift */; };
249
-		05C8D22221EED6860001E847 /* NavigationBarInteractiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22121EED6860001E847 /* NavigationBarInteractiveViewController.swift */; };
250
-		05C8D22421EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22321EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift */; };
251 246
 		05C8D22921EF0A9F0001E847 /* NavigationControllerProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22821EF0A9F0001E847 /* NavigationControllerProxy.swift */; };
252 247
 		05C8D22B21EF0EDC0001E847 /* NavigationControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22A21EF0EDC0001E847 /* NavigationControllerDelegate.swift */; };
253 248
 		05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3C521FF010900A29A20 /* WebViewController.swift */; };
254
-		05D3A3C821FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */; };
255 249
 		05D3A3CD22000C3A00A29A20 /* GroupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3CC22000C3900A29A20 /* GroupCoordinator.swift */; };
256 250
 		05D3A3D02200288400A29A20 /* Storyboarded.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3CF2200288400A29A20 /* Storyboarded.swift */; };
257 251
 		05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
258 252
 		05ED11C52251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */; };
259 253
 		05ED11C72252165700FF3758 /* Notification+wxPay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C62252165700FF3758 /* Notification+wxPay.swift */; };
254
+		05EE558B226F070B00E13460 /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05EE558A226F070B00E13460 /* NavigationController.swift */; };
260 255
 /* End PBXBuildFile section */
261 256
 
262 257
 /* Begin PBXContainerItemProxy section */
@@ -324,7 +319,7 @@
324 319
 
325 320
 /* Begin PBXFileReference section */
326 321
 		045F01541DED33DC00B80C87 /* Paiai.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Paiai.entitlements; sourceTree = "<group>"; };
327
-		0500C26421E8644E009A7013 /* NavigationBackDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackDelegate.swift; sourceTree = "<group>"; };
322
+		0500C26421E8644E009A7013 /* NavigationBackItemDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackItemDelegate.swift; sourceTree = "<group>"; };
328 323
 		0505ACF821DF104500404071 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
329 324
 		0505ACFA21DF106000404071 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
330 325
 		0505ACFC21DF106E00404071 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
@@ -345,7 +340,6 @@
345 340
 		050D719822531B780076CE06 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
346 341
 		050D719A22531B860076CE06 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
347 342
 		050D719C22531BA60076CE06 /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
348
-		050D71A222545D550076CE06 /* NavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationController.swift; sourceTree = "<group>"; };
349 343
 		050E210F21B8CE8A008E1352 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
350 344
 		050E211121B8F2D4008E1352 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = "<group>"; };
351 345
 		050E211321B8F39C008E1352 /* MineCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineCoordinator.swift; sourceTree = "<group>"; };
@@ -468,6 +462,7 @@
468 462
 		0584FD7621F9C8A300FA1E3E /* PresentAnimatorDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentAnimatorDelegate.swift; sourceTree = "<group>"; };
469 463
 		0584FD7B21FABC1400FA1E3E /* PresentExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentExtension.swift; sourceTree = "<group>"; };
470 464
 		0584FD7D21FABD9D00FA1E3E /* PresentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentViewController.swift; sourceTree = "<group>"; };
465
+		058C33ED2272F7BE00A435E9 /* UINavigationController + NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController + NavigationBack.swift"; sourceTree = "<group>"; };
471 466
 		058D0C9C2249C94F006CA488 /* CoordinatorKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoordinatorKey.swift; sourceTree = "<group>"; };
472 467
 		0594845721B528FE00074EFC /* Interfaces.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Interfaces.swift; sourceTree = "<group>"; };
473 468
 		059AA5D921BA1A2000485188 /* MessageCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCoordinator.swift; sourceTree = "<group>"; };
@@ -478,6 +473,7 @@
478 473
 		059B58A721F83B1600FA64C2 /* CenterCancelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CenterCancelItem.swift; sourceTree = "<group>"; };
479 474
 		059B58A921F83B2E00FA64C2 /* CenterConfirmItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CenterConfirmItem.swift; sourceTree = "<group>"; };
480 475
 		05A0E8A821C782D700EAB9A2 /* CreateGroupViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateGroupViewModel.swift; sourceTree = "<group>"; };
476
+		05AF61BE226EFAF700AD8E2F /* NavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBar.swift; sourceTree = "<group>"; };
481 477
 		05B2C5EE21D48133008063B3 /* HomeRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRemoteAPI.swift; sourceTree = "<group>"; };
482 478
 		05B2C60521D60E97008063B3 /* DictionaryExt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExt.swift; sourceTree = "<group>"; };
483 479
 		05B2C61C21D710C5008063B3 /* GroupRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupRemoteAPI.swift; sourceTree = "<group>"; };
@@ -500,22 +496,16 @@
500 496
 		05C71C0721DDBD55003E7CEE /* JSONCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONCode.swift; sourceTree = "<group>"; };
501 497
 		05C8D20F21ED7B270001E847 /* UIApplication+Swizzle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Swizzle.swift"; sourceTree = "<group>"; };
502 498
 		05C8D21121ED7B620001E847 /* UINavigationBar+FixSpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationBar+FixSpace.swift"; sourceTree = "<group>"; };
503
-		05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackViewController.swift; sourceTree = "<group>"; };
504
-		05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+NavigationBack.swift"; sourceTree = "<group>"; };
505 499
 		05C8D21A21ED9A020001E847 /* UIViewController+Navigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Navigation.swift"; sourceTree = "<group>"; };
506
-		05C8D21C21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarInteractivePopDeletegate.swift; sourceTree = "<group>"; };
507
-		05C8D21F21EDD5F50001E847 /* NavigationBarInOutAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarInOutAnimator.swift; sourceTree = "<group>"; };
508
-		05C8D22121EED6860001E847 /* NavigationBarInteractiveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarInteractiveViewController.swift; sourceTree = "<group>"; };
509
-		05C8D22321EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarPushAndPopDelegate.swift; sourceTree = "<group>"; };
510 500
 		05C8D22821EF0A9F0001E847 /* NavigationControllerProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationControllerProxy.swift; sourceTree = "<group>"; };
511 501
 		05C8D22A21EF0EDC0001E847 /* NavigationControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationControllerDelegate.swift; sourceTree = "<group>"; };
512 502
 		05D3A3C521FF010900A29A20 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = "<group>"; };
513
-		05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GestureRecoginzier+NavigationBack.swift"; sourceTree = "<group>"; };
514 503
 		05D3A3CC22000C3900A29A20 /* GroupCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupCoordinator.swift; sourceTree = "<group>"; };
515 504
 		05D3A3CF2200288400A29A20 /* Storyboarded.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storyboarded.swift; sourceTree = "<group>"; };
516 505
 		05E80E2F21DF65D4006368C4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
517 506
 		05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoPurchaseRemoteAPI.swift; sourceTree = "<group>"; };
518 507
 		05ED11C62252165700FF3758 /* Notification+wxPay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification+wxPay.swift"; sourceTree = "<group>"; };
508
+		05EE558A226F070B00E13460 /* NavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationController.swift; sourceTree = "<group>"; };
519 509
 		3864C06C1CAD27EC0048ADAD /* Swift-bridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Swift-bridge.h"; sourceTree = "<group>"; };
520 510
 		42CF50451EC0526C00D23E9F /* MineGroupViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MineGroupViewModel.swift; sourceTree = "<group>"; };
521 511
 		42CF50471EC052B200D23E9F /* MineOrderViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MineOrderViewModel.swift; sourceTree = "<group>"; };
@@ -648,7 +638,8 @@
648 638
 		050D71A122545CE20076CE06 /* NavigationController */ = {
649 639
 			isa = PBXGroup;
650 640
 			children = (
651
-				050D71A222545D550076CE06 /* NavigationController.swift */,
641
+				05AF61BE226EFAF700AD8E2F /* NavigationBar.swift */,
642
+				05EE558A226F070B00E13460 /* NavigationController.swift */,
652 643
 			);
653 644
 			path = NavigationController;
654 645
 			sourceTree = "<group>";
@@ -679,11 +670,10 @@
679 670
 		05130F4D21C94B72004EF1BE /* UIKit */ = {
680 671
 			isa = PBXGroup;
681 672
 			children = (
673
+				058C33EC2272F79800A435E9 /* NavigationBack */,
682 674
 				050D71A122545CE20076CE06 /* NavigationController */,
683 675
 				055BB53F220AEA4E009548AA /* Nibless */,
684 676
 				0584FD7A21FABA0300FA1E3E /* Present */,
685
-				05C8D21E21EDD5A80001E847 /* NavigationBar */,
686
-				05C8D21721ED911D0001E847 /* NavigationBack */,
687 677
 				0513108921CA3914004EF1BE /* QR */,
688 678
 				05130F4E21C94C12004EF1BE /* AlertViewController */,
689 679
 				05130F6121C94C79004EF1BE /* PageViewController */,
@@ -1054,6 +1044,15 @@
1054 1044
 			path = Present;
1055 1045
 			sourceTree = "<group>";
1056 1046
 		};
1047
+		058C33EC2272F79800A435E9 /* NavigationBack */ = {
1048
+			isa = PBXGroup;
1049
+			children = (
1050
+				0500C26421E8644E009A7013 /* NavigationBackItemDelegate.swift */,
1051
+				058C33ED2272F7BE00A435E9 /* UINavigationController + NavigationBack.swift */,
1052
+			);
1053
+			path = NavigationBack;
1054
+			sourceTree = "<group>";
1055
+		};
1057 1056
 		059B58A021F7183100FA64C2 /* AlertAction */ = {
1058 1057
 			isa = PBXGroup;
1059 1058
 			children = (
@@ -1142,28 +1141,6 @@
1142 1141
 			path = ViewControllerTransitioningDelegate;
1143 1142
 			sourceTree = "<group>";
1144 1143
 		};
1145
-		05C8D21721ED911D0001E847 /* NavigationBack */ = {
1146
-			isa = PBXGroup;
1147
-			children = (
1148
-				05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */,
1149
-				0500C26421E8644E009A7013 /* NavigationBackDelegate.swift */,
1150
-				05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */,
1151
-				05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */,
1152
-			);
1153
-			path = NavigationBack;
1154
-			sourceTree = "<group>";
1155
-		};
1156
-		05C8D21E21EDD5A80001E847 /* NavigationBar */ = {
1157
-			isa = PBXGroup;
1158
-			children = (
1159
-				05C8D22121EED6860001E847 /* NavigationBarInteractiveViewController.swift */,
1160
-				05C8D21F21EDD5F50001E847 /* NavigationBarInOutAnimator.swift */,
1161
-				05C8D21C21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift */,
1162
-				05C8D22321EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift */,
1163
-			);
1164
-			path = NavigationBar;
1165
-			sourceTree = "<group>";
1166
-		};
1167 1144
 		05C8D22C21EF0F8E0001E847 /* NavigationControllerDelegate */ = {
1168 1145
 			isa = PBXGroup;
1169 1146
 			children = (
@@ -1276,8 +1253,8 @@
1276 1253
 		6CEBD0F61CA8D680004DBDE0 = {
1277 1254
 			isa = PBXGroup;
1278 1255
 			children = (
1279
-				050D719C22531BA60076CE06 /* SQLite.framework */,
1280 1256
 				050D719A22531B860076CE06 /* RxSwift.framework */,
1257
+				050D719C22531BA60076CE06 /* SQLite.framework */,
1281 1258
 				050D719822531B780076CE06 /* RxCocoa.framework */,
1282 1259
 				050D719622531B650076CE06 /* PullToRefresh.framework */,
1283 1260
 				050D719422531B520076CE06 /* ObjectMapper.framework */,
@@ -1491,7 +1468,6 @@
1491 1468
 				TargetAttributes = {
1492 1469
 					05130F2D21C94B32004EF1BE = {
1493 1470
 						CreatedOnToolsVersion = 10.1;
1494
-						DevelopmentTeam = Q38447SL4M;
1495 1471
 						LastSwiftMigration = 1020;
1496 1472
 						ProvisioningStyle = Automatic;
1497 1473
 					};
@@ -1509,7 +1485,6 @@
1509 1485
 					};
1510 1486
 					6CEBD0FE1CA8D680004DBDE0 = {
1511 1487
 						CreatedOnToolsVersion = 7.3;
1512
-						DevelopmentTeam = Q38447SL4M;
1513 1488
 						LastSwiftMigration = 1020;
1514 1489
 						ProvisioningStyle = Automatic;
1515 1490
 						SystemCapabilities = {
@@ -1627,8 +1602,6 @@
1627 1602
 			isa = PBXSourcesBuildPhase;
1628 1603
 			buildActionMask = 2147483647;
1629 1604
 			files = (
1630
-				05C8D21D21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift in Sources */,
1631
-				05C8D22421EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift in Sources */,
1632 1605
 				05130FFD21CA1B39004EF1BE /* HardwareAuthorization.swift in Sources */,
1633 1606
 				05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */,
1634 1607
 				05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */,
@@ -1637,19 +1610,18 @@
1637 1610
 				059B58AA21F83B2E00FA64C2 /* CenterConfirmItem.swift in Sources */,
1638 1611
 				05C5285E21FEB03F0090ECB5 /* ViewControllerTransitioningProxy.swift in Sources */,
1639 1612
 				057317A421F5C6C0009B2FCE /* BottomCancelItem.swift in Sources */,
1640
-				05C8D22021EDD5F50001E847 /* NavigationBarInOutAnimator.swift in Sources */,
1641 1613
 				0513100121CA1B39004EF1BE /* CGPointExt.swift in Sources */,
1642 1614
 				0584FD7521F9C70D00FA1E3E /* SideAnimator.swift in Sources */,
1643 1615
 				0584FD7721F9C8A300FA1E3E /* PresentAnimatorDelegate.swift in Sources */,
1644 1616
 				059B589F21F7103100FA64C2 /* AlertItem.swift in Sources */,
1617
+				058C33EE2272F7BE00A435E9 /* UINavigationController + NavigationBack.swift in Sources */,
1645 1618
 				059B58A621F7235D00FA64C2 /* AlertAction.swift in Sources */,
1646 1619
 				0513109821CA3915004EF1BE /* QRCodeScanResult.swift in Sources */,
1647 1620
 				0513100221CA1B39004EF1BE /* CGSizeExt.swift in Sources */,
1648
-				05C8D22221EED6860001E847 /* NavigationBarInteractiveViewController.swift in Sources */,
1649 1621
 				0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */,
1650 1622
 				0513100721CA1B39004EF1BE /* UIViewController+UIBarButtonItem.swift in Sources */,
1651 1623
 				05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */,
1652
-				0500C26521E8644E009A7013 /* NavigationBackDelegate.swift in Sources */,
1624
+				0500C26521E8644E009A7013 /* NavigationBackItemDelegate.swift in Sources */,
1653 1625
 				057317A221F5C6A0009B2FCE /* BottomDefaultItem.swift in Sources */,
1654 1626
 				0513106021CA1E53004EF1BE /* UIStoryboardExt.swift in Sources */,
1655 1627
 				059B58A821F83B1600FA64C2 /* CenterCancelItem.swift in Sources */,
@@ -1662,6 +1634,7 @@
1662 1634
 				0513109B21CA3915004EF1BE /* QRCodeConfiguration.swift in Sources */,
1663 1635
 				055BB541220AEA62009548AA /* NiblessView.swift in Sources */,
1664 1636
 				0513101021CA1B39004EF1BE /* UIViewControllerExt.swift in Sources */,
1637
+				05AF61BF226EFAF700AD8E2F /* NavigationBar.swift in Sources */,
1665 1638
 				0513101221CA1B39004EF1BE /* UITextFieldExt.swift in Sources */,
1666 1639
 				05C0CEF921F8567C00993DE2 /* AlertView.swift in Sources */,
1667 1640
 				0513108021CA3907004EF1BE /* ActionSheetView.swift in Sources */,
@@ -1671,21 +1644,18 @@
1671 1644
 				0513101921CA1B39004EF1BE /* UIImageExt.swift in Sources */,
1672 1645
 				05C8D22921EF0A9F0001E847 /* NavigationControllerProxy.swift in Sources */,
1673 1646
 				05D3A3D02200288400A29A20 /* Storyboarded.swift in Sources */,
1674
-				050D71A322545D550076CE06 /* NavigationController.swift in Sources */,
1675 1647
 				05C0CEFB21F85A7700993DE2 /* ActionSheetController.swift in Sources */,
1676
-				05C8D21421ED8B9B0001E847 /* NavigationBackViewController.swift in Sources */,
1677 1648
 				0584FD7C21FABC1400FA1E3E /* PresentExtension.swift in Sources */,
1678 1649
 				05C8D21B21ED9A020001E847 /* UIViewController+Navigation.swift in Sources */,
1679 1650
 				0513109521CA3915004EF1BE /* QRCodeScanDelegate.swift in Sources */,
1680 1651
 				0584FD7E21FABD9D00FA1E3E /* PresentViewController.swift in Sources */,
1681 1652
 				053E126521F1718E00A64893 /* PageOption.swift in Sources */,
1682
-				05C8D21921ED985C0001E847 /* UINavigationController+NavigationBack.swift in Sources */,
1683
-				05D3A3C821FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift in Sources */,
1684 1653
 				05130F5A21C94C12004EF1BE /* PresentDisappearAnimatedTransitioning.swift in Sources */,
1685 1654
 				053E126721F1719F00A64893 /* PageItem.swift in Sources */,
1686 1655
 				053E127821F5B6E400A64893 /* AlertController.swift in Sources */,
1687 1656
 				05C5285621FE98F50090ECB5 /* GestureRecognizerProxy.swift in Sources */,
1688 1657
 				05130F5921C94C12004EF1BE /* AlertViewController.swift in Sources */,
1658
+				05EE558B226F070B00E13460 /* NavigationController.swift in Sources */,
1689 1659
 				0513109421CA3915004EF1BE /* QRCodeMaskView.swift in Sources */,
1690 1660
 				0513109721CA3915004EF1BE /* QRCodeScanner.swift in Sources */,
1691 1661
 				05130F5E21C94C12004EF1BE /* PresentAppearAnimatedTransitioning.swift in Sources */,
@@ -1930,7 +1900,7 @@
1930 1900
 				CODE_SIGN_STYLE = Automatic;
1931 1901
 				CURRENT_PROJECT_VERSION = 1;
1932 1902
 				DEFINES_MODULE = YES;
1933
-				DEVELOPMENT_TEAM = Q38447SL4M;
1903
+				DEVELOPMENT_TEAM = RSJ4N8U2LM;
1934 1904
 				DYLIB_COMPATIBILITY_VERSION = 1;
1935 1905
 				DYLIB_CURRENT_VERSION = 1;
1936 1906
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
@@ -1950,7 +1920,7 @@
1950 1920
 				SKIP_INSTALL = YES;
1951 1921
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
1952 1922
 				SWIFT_VERSION = 5.0;
1953
-				TARGETED_DEVICE_FAMILY = "1,2";
1923
+				TARGETED_DEVICE_FAMILY = 1;
1954 1924
 				VERSIONING_SYSTEM = "apple-generic";
1955 1925
 				VERSION_INFO_PREFIX = "";
1956 1926
 			};
@@ -1970,7 +1940,7 @@
1970 1940
 				CURRENT_PROJECT_VERSION = 1;
1971 1941
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1972 1942
 				DEFINES_MODULE = YES;
1973
-				DEVELOPMENT_TEAM = Q38447SL4M;
1943
+				DEVELOPMENT_TEAM = RSJ4N8U2LM;
1974 1944
 				DYLIB_COMPATIBILITY_VERSION = 1;
1975 1945
 				DYLIB_CURRENT_VERSION = 1;
1976 1946
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
@@ -1988,7 +1958,7 @@
1988 1958
 				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
1989 1959
 				SKIP_INSTALL = YES;
1990 1960
 				SWIFT_VERSION = 5.0;
1991
-				TARGETED_DEVICE_FAMILY = "1,2";
1961
+				TARGETED_DEVICE_FAMILY = 1;
1992 1962
 				VERSIONING_SYSTEM = "apple-generic";
1993 1963
 				VERSION_INFO_PREFIX = "";
1994 1964
 			};
@@ -2311,7 +2281,7 @@
2311 2281
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
2312 2282
 				CODE_SIGN_STYLE = Automatic;
2313 2283
 				DEFINES_MODULE = YES;
2314
-				DEVELOPMENT_TEAM = Q38447SL4M;
2284
+				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2315 2285
 				ENABLE_BITCODE = NO;
2316 2286
 				FRAMEWORK_SEARCH_PATHS = (
2317 2287
 					"$(inherited)",
@@ -2337,7 +2307,7 @@
2337 2307
 				);
2338 2308
 				MACH_O_TYPE = mh_execute;
2339 2309
 				ONLY_ACTIVE_ARCH = YES;
2340
-				OTHER_LDFLAGS = "";
2310
+				OTHER_LDFLAGS = "-all_load";
2341 2311
 				OTHER_SWIFT_FLAGS = "-DDEBUG";
2342 2312
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
2343 2313
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2363,7 +2333,7 @@
2363 2333
 				CODE_SIGN_STYLE = Automatic;
2364 2334
 				DEBUG_INFORMATION_FORMAT = dwarf;
2365 2335
 				DEFINES_MODULE = YES;
2366
-				DEVELOPMENT_TEAM = Q38447SL4M;
2336
+				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2367 2337
 				FRAMEWORK_SEARCH_PATHS = (
2368 2338
 					"$(inherited)",
2369 2339
 					"$(PROJECT_DIR)/Paiai",
@@ -2387,7 +2357,7 @@
2387 2357
 				);
2388 2358
 				MACH_O_TYPE = mh_execute;
2389 2359
 				ONLY_ACTIVE_ARCH = YES;
2390
-				OTHER_LDFLAGS = "";
2360
+				OTHER_LDFLAGS = "-all_load";
2391 2361
 				OTHER_SWIFT_FLAGS = "";
2392 2362
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
2393 2363
 				PRODUCT_NAME = "$(TARGET_NAME)";

二进制
PaiAi/Paiai.xcodeproj/project.xcworkspace/xcuserdata/FFIB.xcuserdatad/UserInterfaceState.xcuserstate


+ 12 - 0
PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2,4 +2,16 @@
2 2
 <Bucket
3 3
    type = "1"
4 4
    version = "2.0">
5
+   <Breakpoints>
6
+      <BreakpointProxy
7
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
8
+         <BreakpointContent
9
+            shouldBeEnabled = "Yes"
10
+            ignoreCount = "0"
11
+            continueAfterRunningActions = "No"
12
+            scope = "0"
13
+            stopOnStyle = "0">
14
+         </BreakpointContent>
15
+      </BreakpointProxy>
16
+   </Breakpoints>
5 17
 </Bucket>

+ 5 - 5
PaiAi/Paiai/AppDelegate.swift

@@ -7,9 +7,10 @@
7 7
 //
8 8
 
9 9
 import UIKit
10
-import Paiai_iOS
11 10
 import PaiaiUIKit
12 11
 import PaiaiDataKit
12
+import Paiai_iOS
13
+
13 14
 
14 15
 let WXAppid = "wx4e22a0c8ae6d766d"
15 16
 let WXSecret = "636ac848016c593575d11143c55c8333"
@@ -32,19 +33,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
32 33
         -> Bool {
33 34
             registerAppConfiguration()
34 35
             let rootViewController = ContainerViewController()
35
-            let nav = UINavigationController(rootViewController: rootViewController)
36
+            let nav = NavigationController(rootViewController: rootViewController)
36 37
             
37
-            rootViewController.setupNavigationBarPushAndPopDelegate()
38 38
             window = UIWindow(frame: UIScreen.main.bounds)
39 39
             window?.rootViewController = nav
40 40
             window?.makeKeyAndVisible()
41 41
             
42 42
             coordinator = AppCoordinator(rootViewController, navigationController: nav)
43 43
             
44
-            nav.navigationBar.tintColor = UIColor.white
45
-            nav.navigationBar.isTranslucent = false
44
+            nav.navigationBar.tintColor = UIColor.white            
46 45
             nav.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
47 46
             nav.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white.cgColor]
47
+            nav.navigationBar.shadowImage = UIImage()
48 48
             return true
49 49
     }
50 50
 

+ 6 - 6
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/Reusable/NetWork/NetWorkCache.swift

@@ -14,9 +14,9 @@ struct NetWorkCache {
14 14
     init() { }
15 15
 
16 16
     func saveCache(_ task: URLSessionTask, params: [String: AnyObject], data: Data) {
17
-        guard let request = task.originalRequest, let url = request.url?.absoluteString else {
18
-            return
19
-        }
17
+//        guard let request = task.originalRequest, let url = request.url?.absoluteString else {
18
+//            return
19
+//        }
20 20
 //        let cacheRequest = Alamofire.request(url, method: .get, parameters: params)
21 21
 //        cacheRequest.cancel()
22 22
 //        let cacheRespone = CachedURLResponse(response: task.response!, data: data)
@@ -24,9 +24,9 @@ struct NetWorkCache {
24 24
     }
25 25
 
26 26
     func getCache(_ task: URLSessionTask, params: [String: AnyObject]) -> [String: AnyObject]? {
27
-        guard let request = task.originalRequest, let url = request.url?.absoluteString else {
28
-            return nil
29
-        }
27
+//        guard let request = task.originalRequest, let url = request.url?.absoluteString else {
28
+//            return nil
29
+//        }
30 30
 //        let cacheRequest = Alamofire.request(url, method: .get, parameters: params).request
31 31
 //        let cache = URLCache.shared.cachedResponse(for: cacheRequest!)
32 32
 //        guard let data = cache?.data else {

+ 3 - 3
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/WXUserInfoRemoteAPI.swift

@@ -17,12 +17,12 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
17 17
     init() {}
18 18
     
19 19
     func login() -> Single<UserInfo> {
20
-//        #if (arch(i386) || arch(x86_64))
20
+        #if (arch(i386) || arch(x86_64))
21 21
         return Single.create(subscribe: { (observer) in
22 22
             observer(.success(UserInfo(json: ["user_id": "fiDz2Ms" as AnyObject, "userName": "郑剑飞" as AnyObject, "photoPath": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJibSYLgvXpMakvD9FaCqfiaWqcMiaiaz905YxWPuO4hy8F2lGheV7kVr9vKKXFgmL1S5s4QJgxwuwtVw/132" as AnyObject])))
23 23
             return Disposables.create()
24 24
         })
25
-//        #else
25
+        #else
26 26
         loginWithWeChat()
27 27
         return addWXLoginDidFinish().flatMap({
28 28
             return self.getWXToken(param: $0)
@@ -33,7 +33,7 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
33 33
         }).do(onSuccess: { res in
34 34
             print(res)
35 35
         })
36
-//        #endif
36
+        #endif
37 37
     }
38 38
     
39 39
     fileprivate func loginWithWeChat() {

二进制
PaiAi/PaiaiUIKit/Reusable/UIKit/.DS_Store


+ 0 - 24
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/GestureRecoginzier+NavigationBack.swift

@@ -1,24 +0,0 @@
1
-//
2
-//  GestureRecoginzier+NavigationBack.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/29.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import UIKit
10
-
11
-public extension GestureRecognizerDelegate where Self: UIViewController & NavigationBackDelegate {
12
-    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
13
-                           shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
14
-        if gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer,
15
-            gestureRecognizer.isKind(of: UIPanGestureRecognizer.self),
16
-            let pan = gestureRecognizer as? UIPanGestureRecognizer {
17
-            let point = pan.translation(in: self.view)
18
-            if point.x > 0 {
19
-                return true
20
-            }
21
-        }
22
-        return false
23
-    }
24
-}

+ 3 - 4
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/NavigationBackDelegate.swift

@@ -1,5 +1,5 @@
1 1
 //
2
-//  NavigationBackDelegate.swift
2
+//  NavigationBackItemDelegate.swift
3 3
 //  PaiaiUIKit
4 4
 //
5 5
 //  Created by ffib on 2019/1/11.
@@ -8,14 +8,13 @@
8 8
 
9 9
 import Foundation
10 10
 
11
-public protocol NavigationBackDelegate: class {
11
+public protocol NavigationBackViewController e: class {
12 12
     func setupNavigationBackItem()
13 13
 }
14 14
 
15
-public extension NavigationBackDelegate where Self: UIViewController {
15
+public extension NavigationBackViewController where Self: UIViewController {
16 16
     func setupNavigationBackItem() {
17 17
         let btn = UIButton(type: .system)
18
-        
19 18
         btn.contentHorizontalAlignment = .left
20 19
         btn.frame = CGRect(x: 0, y: 0, width: 40 , height: 40)
21 20
         btn.setImage(UIImage(named: "navigation-back"), for: .normal)

+ 0 - 12
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/NavigationBackViewController.swift

@@ -1,12 +0,0 @@
1
-//
2
-//  NavigationBackViewController.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/15.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import UIKit
10
-
11
-public typealias NavigationBackViewController = NavigationBackDelegate & GestureRecognizerDelegate
12
- 

+ 16 - 0
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/UINavigationController + NavigationBack.swift

@@ -0,0 +1,16 @@
1
+//
2
+//  UINavigationController + NavigationBack.swift
3
+//  PaiaiUIKit
4
+//
5
+//  Created by ffib on 2019/4/26.
6
+//  Copyright © 2019 FFIB. All rights reserved.
7
+//
8
+
9
+import Foundation
10
+
11
+public extension UINavigationController {
12
+    func pushViewController<T: UIViewController & NavigationBackViewController>(_ vc: T, animted: Bool = true) {
13
+        vc.setupNavigationBackItem()
14
+        pushViewController(vc, animated: animted)
15
+    }
16
+}

+ 0 - 18
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBack/UINavigationController+NavigationBack.swift

@@ -1,18 +0,0 @@
1
-//
2
-//  UINavigationController+NavigationBack.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/15.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import UIKit
10
-
11
-public extension UINavigationController {
12
-    func pushViewController<T: UIViewController & NavigationBackViewController>(_ vc: T, animted: Bool = true) {
13
-        vc.setupNavigationBackItem()
14
-        (vc as? NavigationBarPushAndPopDelegate)?.setupNavigationBarPushAndPopDelegate()
15
-        pushViewController(vc, animated: animted)
16
-        (vc as? NavigationBarInteractivePopDeletegate)?.setupNavigationBarInteractivePopDelegate()
17
-    }
18
-}

+ 0 - 77
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInOutAnimator.swift

@@ -1,77 +0,0 @@
1
-//
2
-//  NavigationBarInOutAnimator.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/15.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import UIKit
10
-
11
-public protocol NavigationBarInOutAnimator: class {
12
-    var navigationView: UIView { get }
13
-    func navigationBarFadeIn(percentage: CGFloat)
14
-    func navigationBarFadeOut(percentage: CGFloat)
15
-    func navigationBarFadeAndMoveIn(percentage: CGFloat)
16
-    func navigationBarFadeAndMoveOut(percentage: CGFloat)
17
-    func navigationBarFadeOutWithPercentage(_ percentage: CGFloat)
18
-    func navigationBarFadeInWithPercentage(_ percentage: CGFloat)
19
-}
20
-
21
-public extension NavigationBarInOutAnimator where Self: UIViewController & NavigationBarPushAndPopDelegate {
22
-    func navigationBarFadeIn(percentage: CGFloat) {
23
-        UIView.animate(withDuration: TimeInterval(0.3 * percentage),
24
-                       animations: {
25
-            self.navigationView.alpha = 1
26
-        }, completion: nil)
27
-    }
28
-    
29
-    func navigationBarFadeOut(percentage: CGFloat) {
30
-        UIView.animate(withDuration: TimeInterval(0.3 * percentage),
31
-                       animations: {
32
-            self.navigationView.alpha = 0
33
-        }, completion: nil)
34
-    }
35
-    
36
-    func navigationBarFadeAndMoveIn(percentage: CGFloat) {
37
-//        setNavigationBar()
38
-//        navigationController?.navigationBar.layoutIfNeeded()
39
-        
40
-//        let originX = navigationView.center.x
41
-//        navigationView.center.x = UIScreen.main.bounds.width
42
-        
43
-        UIView.animate(withDuration: TimeInterval(0.3 * percentage),
44
-                       animations: {
45
-            self.navigationView.alpha = 1
46
-            self.navigationView.center.x = UIScreen.main.bounds.width / 2
47
-        }, completion: { flag in
48
-//            if flag {
49
-                self.setNavigationBar()
50
-//            }
51
-            print("move in \(flag)")
52
-        })
53
-    }
54
-    
55
-    func navigationBarFadeAndMoveOut(percentage: CGFloat) {
56
-        print(self.navigationView.center)
57
-        UIView.animate(withDuration: TimeInterval(0.3 * percentage),
58
-                       animations: {
59
-            self.navigationView.alpha = 0
60
-            self.navigationView.center.x = UIScreen.main.bounds.width
61
-        }, completion: { flag in
62
-//            if flag {
63
-                self.navigationView.removeFromSuperview()
64
-//            }
65
-            print("move out \(flag)")
66
-        })
67
-    }
68
-    
69
-    func navigationBarFadeOutWithPercentage(_ percentage: CGFloat) {
70
-        navigationView.alpha = 1 * (1 - 1.1 * percentage)
71
-        navigationView.center.x = UIScreen.main.bounds.width / 2  * (1 + 1.1 * percentage)
72
-    }
73
-    
74
-    func navigationBarFadeInWithPercentage(_ percentage: CGFloat) {
75
-        navigationView.alpha = 1 * percentage
76
-    }
77
-}

+ 0 - 63
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInteractivePopDeletegate.swift

@@ -1,63 +0,0 @@
1
-//
2
-//  NavigationBarInteractivePopDeletegate.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/15.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import Foundation
10
-
11
-public protocol NavigationBarInteractivePopDeletegate: class {
12
-    func setupNavigationBarInteractivePopDelegate()
13
-}
14
-
15
-public extension NavigationBarInteractivePopDeletegate where Self: UIViewController & NavigationBarInOutAnimator {
16
-    func setupNavigationBarInteractivePopDelegate() {
17
-        guard let nav = navigationController else { return }
18
-        nav.interactivePopGestureRecognizer?.addTarget(self, action: #selector(interactivePopAnimation(gesture:)))
19
-    }
20
-}
21
-
22
-extension UIViewController {
23
-    @objc func interactivePopAnimation(gesture: UIPanGestureRecognizer) {
24
-        guard let `self` =  self as? (NavigationBarInOutAnimator & UIViewController) else { return }
25
-        let point = gesture.translation(in: view)
26
-        let percentage = calculatePercentageOfOffsets(point: point)
27
-        
28
-        /// naivgationController == nil  popped viewController
29
-        /// navigationController?.visibleViewController == self pop to viewController
30
-        
31
-        let percentageAnimation: ((CGFloat) -> Void)
32
-        let fadeInAnimation: ((CGFloat) -> Void)
33
-        let fadeOutAnimation: ((CGFloat) -> Void)
34
-
35
-        if navigationController == nil {
36
-            percentageAnimation = self.navigationBarFadeOutWithPercentage
37
-            fadeInAnimation = self.navigationBarFadeAndMoveIn
38
-            fadeOutAnimation = self.navigationBarFadeAndMoveOut
39
-        } else if navigationController?.visibleViewController == self {
40
-            percentageAnimation = self.navigationBarFadeInWithPercentage
41
-            fadeInAnimation = self.navigationBarFadeIn
42
-            fadeOutAnimation = self.navigationBarFadeOut
43
-        } else {
44
-            return
45
-        }
46
-        
47
-        percentageAnimation(percentage)
48
-        
49
-        guard gesture.state == .ended else { return }
50
-
51
-        if (percentage > 0.5 && navigationController == nil) ||
52
-            (percentage < 0.5 && navigationController?.visibleViewController == self) {
53
-            fadeOutAnimation(1 - percentage)
54
-        } else if (percentage < 0.5 && navigationController == nil) ||
55
-            (percentage > 0.5 && navigationController?.visibleViewController == self) {
56
-            fadeInAnimation(percentage)
57
-        }
58
-    }
59
-    
60
-    private func calculatePercentageOfOffsets(point: CGPoint) -> CGFloat {
61
-        return point.x / view.bounds.width
62
-    }
63
-}

+ 0 - 12
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarInteractiveViewController.swift

@@ -1,12 +0,0 @@
1
-//
2
-//  NavigationBarInteractiveViewController.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/16.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import Foundation
10
-
11
-public typealias NavigationBarInteractiveViewController = NavigationBarInteractivePopDeletegate & NavigationBarPushAndPopDelegate & NavigationBarInOutAnimator & NavigationControllerDelegate
12
-

+ 0 - 49
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationBar/NavigationBarPushAndPopDelegate.swift

@@ -1,49 +0,0 @@
1
-//
2
-//  NavigationBarPushAndPopDelegate.swift
3
-//  PaiaiUIKit
4
-//
5
-//  Created by ffib on 2019/1/16.
6
-//  Copyright © 2019 yb. All rights reserved.
7
-//
8
-
9
-import Foundation
10
-
11
-public protocol NavigationBarPushAndPopDelegate: class {
12
-    func setupNavigationBarPushAndPopDelegate()
13
-    func setNavigationBar()
14
-}
15
-
16
-public extension NavigationBarPushAndPopDelegate where Self: UIViewController & NavigationControllerDelegate {
17
-    func setupNavigationBarPushAndPopDelegate() {
18
-        navigationController?.setDelegate(self)
19
-    }
20
-    
21
-    func setNavigationBar() {}
22
-}
23
-
24
-public extension NavigationControllerDelegate where Self: UIViewController {
25
-    
26
-    func navigationController(_ navigationController: UINavigationController,
27
-                              animationControllerFor operation: UINavigationController.Operation,
28
-                              from fromVC: UIViewController,
29
-                              to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
30
-        
31
-        if operation == .push {
32
-            (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveIn(percentage: 1)
33
-            (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeOut(percentage: 1)
34
-        } else {
35
-            (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeIn(percentage: 1)
36
-            (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveOut(percentage: 1)
37
-        }
38
-        
39
-        return nil
40
-    }
41
-    
42
-    func navigationController(_ navigationController: UINavigationController,
43
-                              didShow viewController: UIViewController, animated: Bool) {
44
-        guard let recognizer = navigationController.interactivePopGestureRecognizer else { return }
45
-        recognizer.isEnabled = true
46
-        guard let vc = viewController as? GestureRecognizerDelegate else { return }
47
-        recognizer.setDelegate(vc)
48
-    }
49
-}

+ 233 - 0
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationController/NavigationBar.swift

@@ -0,0 +1,233 @@
1
+//
2
+//  NavigationBar.swift
3
+//  PaiaiUIKit
4
+//
5
+//  Created by ffib on 2019/4/23.
6
+//  Copyright © 2019 FFIB. All rights reserved.
7
+//
8
+
9
+import UIKit
10
+
11
+class NavigationBar: UINavigationBar {
12
+    
13
+    private var currBgImage: UIImage?
14
+    private var targetBgImage: UIImage?
15
+    private var originShadowImage: UIImage?
16
+    
17
+    private var hasChangedBgImage: Bool = false
18
+    private var hasChangedShadow: Bool = false
19
+    private var titleView: UIView?
20
+    
21
+    var needsInteractive: Bool {
22
+        return hasChangedBgImage || hasChangedShadow
23
+    }
24
+    var bounce: Bounce = .none
25
+    var isPush: Bool = true
26
+    
27
+    override var shadowImage: UIImage? {
28
+        didSet {
29
+            originShadowImage = oldValue
30
+            hasChangedShadow = true
31
+        }
32
+    }
33
+    
34
+    lazy var fakeView: UIVisualEffectView = {
35
+        let v = UIVisualEffectView(effect: UIBlurEffect(style: .light))
36
+        v.frame = getNavigationBarBounds()
37
+        v.isUserInteractionEnabled = false
38
+        v.autoresizingMask = [.flexibleWidth, .flexibleHeight]
39
+        
40
+        return v
41
+    }()
42
+    
43
+    lazy var backgroundImageView: UIImageView = {
44
+        let v = UIImageView()
45
+        v.isUserInteractionEnabled = false
46
+        v.frame = getNavigationBarBounds().offsetBy(dx: bounds.width, dy: 0)
47
+        
48
+        return v
49
+    }()
50
+    
51
+    lazy var shadowImageView: UIImageView = {
52
+        let v = UIImageView()
53
+        v.frame = CGRect(x: 0, y: bounds.height, width: bounds.width, height: 0.5)
54
+        
55
+        return v
56
+    }()
57
+    
58
+    override init(frame: CGRect) {
59
+        super.init(frame: frame)
60
+    }
61
+    
62
+    required init?(coder aDecoder: NSCoder) {
63
+        fatalError("init(coder:) has not been implemented")
64
+    }
65
+    override func setBackgroundImage(_ backgroundImage: UIImage?, for barMetrics: UIBarMetrics) {
66
+        currBgImage = self.backgroundImage(for: .default)
67
+        targetBgImage = backgroundImage
68
+        hasChangedBgImage = true
69
+    }
70
+    
71
+    override func setBackgroundImage(_ backgroundImage: UIImage?, for barPosition: UIBarPosition, barMetrics: UIBarMetrics) {
72
+        currBgImage = self.backgroundImage(for: .default)
73
+        targetBgImage = backgroundImage
74
+        hasChangedBgImage = true
75
+    }
76
+    
77
+    func setBackgroundImage() {
78
+        super.setBackgroundImage(targetBgImage, for: .any, barMetrics: .default)
79
+    }
80
+    
81
+    func getBarBackground() -> UIView? {
82
+       return value(forKeyPath: "_backgroundView") as? UIView
83
+    }
84
+    
85
+    func getContentView() -> UIView? {
86
+        for v in subviews {
87
+            if let ContentClass = NSClassFromString("_UINavigationBarContentView"), v.isKind(of: ContentClass) {
88
+                return v
89
+            }
90
+        }
91
+        return nil
92
+    }
93
+    
94
+    func getShadowView() -> UIView? {
95
+        guard let barBackground = getBarBackground() else { return nil }
96
+        for v in barBackground.subviews {
97
+            if (v.bounds.height == 0.5) {
98
+                return v
99
+            }
100
+        }
101
+        return nil
102
+    }
103
+    
104
+    func getNavigationBarBounds() -> CGRect {
105
+        let statusHeight = UIApplication.shared.statusBarFrame.height
106
+        return CGRect(x: 0, y: -statusHeight, width: bounds.width, height: bounds.height + statusHeight)
107
+    }
108
+    
109
+    override func value(forUndefinedKey key: String) -> Any? {
110
+        return nil
111
+    }
112
+}
113
+
114
+/// NavigationBar transition
115
+extension NavigationBar {
116
+    func constructViewHierarchy() {
117
+        setupShadowView()
118
+        setupBackgroundImageView()
119
+        
120
+        guard let barBackground = getBarBackground() else { return }
121
+        
122
+        insertSubview(shadowImageView, aboveSubview: barBackground)
123
+        insertSubview(backgroundImageView, aboveSubview: barBackground)
124
+        insertSubview(fakeView, belowSubview: backgroundImageView)
125
+        layoutIfNeeded()
126
+    }
127
+    
128
+    private func setupShadowView() {
129
+        if let image = originShadowImage, image.size == CGSize.zero {
130
+            shadowImageView.image = image
131
+        } else {
132
+            shadowImageView.backgroundColor = UIColor(red: 0, green: 0, blue: 0,
133
+                                                      alpha: 77.0 / 255)
134
+        }
135
+        
136
+        shadowImageView.alpha = originShadowImage == nil ? 1 : 0
137
+        getShadowView()?.isHidden = true
138
+    }
139
+    
140
+    private func setupBackgroundImageView() {
141
+        if isPush {
142
+            fakeView.alpha = 0
143
+            backgroundImageView.image = targetBgImage
144
+        } else {
145
+            setBackgroundImage()
146
+            fakeView.alpha = 1
147
+            backgroundImageView.image = currBgImage
148
+        }
149
+    }
150
+    
151
+    /// interactivePopGestureRecognizer
152
+    func transitionAnimationWithPercent(_ percent: CGFloat) {
153
+        switch bounce {
154
+        case .forward, .none:
155
+            transitionShadowAnimationWithPercent(percent)
156
+            transitionBackgroundAnimationWithPercent(percent)
157
+            break
158
+        case .backward:
159
+            transitionShadowAnimationWithPercent(1 - percent)
160
+            transitionBackgroundAnimationWithPercent(1 - percent)
161
+            break
162
+        }
163
+    }
164
+    
165
+    func transitionAnimation() {
166
+        transitionShadowAnimation()
167
+        transitionBackgroundAnimation()
168
+    }
169
+    
170
+    private func transitionShadowAnimation() {
171
+        guard hasChangedShadow else { return }
172
+        shadowImageView.alpha = originShadowImage == nil ? 0 : 1
173
+//        if originShadowImage == nil {
174
+//            shadowImageView.alpha = isInteractive ? (1 - percent) * 1 : 0
175
+//        } else {
176
+//            shadowImageView.alpha = isInteractive ? percent * 1 : 1
177
+//        }
178
+    }
179
+    
180
+    private func transitionBackgroundAnimation() {
181
+        guard hasChangedBgImage else { return }
182
+        if isPush {
183
+            fakeView.alpha = 1
184
+            backgroundImageView.frame.origin.x = 0
185
+        } else {
186
+            fakeView.alpha = 0
187
+            backgroundImageView.frame.origin.x = bounds.width
188
+        }
189
+    }
190
+    
191
+    private func transitionShadowAnimationWithPercent(_ percent: CGFloat) {
192
+        guard hasChangedShadow else { return }
193
+        shadowImageView.alpha = originShadowImage == nil ? (1 - percent) * 1 : percent * 1
194
+    }
195
+    
196
+    private func transitionBackgroundAnimationWithPercent(_ percent: CGFloat) {
197
+        guard hasChangedBgImage else { return }
198
+        fakeView.alpha = (1 - percent) * 1
199
+        backgroundImageView.frame.origin.x = percent * bounds.width
200
+    }
201
+    
202
+    func clear() {
203
+        
204
+        if isPush && hasChangedBgImage { setBackgroundImage() }
205
+        
206
+        if !isPush && bounce == .backward && hasChangedBgImage {
207
+            targetBgImage = currBgImage
208
+            setBackgroundImage()
209
+        }
210
+        
211
+        getShadowView()?.isHidden = false
212
+        
213
+        fakeView.removeFromSuperview()
214
+        shadowImageView.removeFromSuperview()
215
+        backgroundImageView.removeFromSuperview()
216
+        
217
+        currBgImage = nil
218
+        targetBgImage = nil
219
+        
220
+        hasChangedBgImage = false
221
+        hasChangedShadow = false
222
+        
223
+        bounce = .none
224
+    }
225
+}
226
+
227
+extension NavigationBar {
228
+    enum Bounce {
229
+        case none
230
+        case backward
231
+        case forward
232
+    }
233
+}

+ 100 - 18
PaiAi/PaiaiUIKit/Reusable/UIKit/NavigationController/NavigationController.swift

@@ -2,28 +2,110 @@
2 2
 //  NavigationController.swift
3 3
 //  PaiaiUIKit
4 4
 //
5
-//  Created by ffib on 2019/4/3.
6
-//  Copyright © 2019 yb. All rights reserved.
5
+//  Created by ffib on 2019/4/23.
6
+//  Copyright © 2019 FFIB. All rights reserved.
7 7
 //
8 8
 
9 9
 import UIKit
10 10
 
11
-class NavigationController: UINavigationController {
11
+public class NavigationController: UINavigationController {
12 12
     
13
+    override public init(rootViewController: UIViewController) {
14
+        super.init(navigationBarClass: NavigationBar.classForCoder(), toolbarClass: nil)
15
+//        super.init(rootViewController: rootViewController)
16
+//        navigationBar.delegate = self
17
+        self.viewControllers = [rootViewController]
18
+    }
19
+    
20
+    required init?(coder aDecoder: NSCoder) {
21
+        super.init(coder: aDecoder)
22
+    }
23
+    
24
+    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
25
+        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
26
+    }
27
+    
28
+    override public func viewDidLoad() {
29
+        super.viewDidLoad()
30
+        delegate = self
31
+        interactivePopGestureRecognizer?.delegate = self
32
+        interactivePopGestureRecognizer?.isEnabled = true
33
+        
34
+        
35
+        interactivePopGestureRecognizer?.addTarget(self,
36
+                                                   action: #selector(handlePop(gestureRecognizer:)))
37
+    }
38
+    
39
+    @objc
40
+    private func handlePop(gestureRecognizer: UIPanGestureRecognizer) {
41
+        guard let navBar = navigationBar as? NavigationBar else { return }
42
+        if gestureRecognizer.state == .began { navBar.isPush = false }
43
+        
44
+        guard navBar.needsInteractive else { return }
45
+        
46
+        let percent = gestureRecognizer.translation(in: view).x / view.bounds.width
47
+        
48
+        if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
49
+            navBar.transitionAnimationWithPercent(percent)
50
+        }
51
+        
52
+        guard gestureRecognizer.state == .ended
53
+            || gestureRecognizer.state == .cancelled
54
+            || gestureRecognizer.state == .failed,
55
+            let coordinator = transitionCoordinator else { return }
56
+        
57
+        navBar.bounce = percent < 0.5 ? .backward : .forward
58
+        let durationPercent = Double(percent < 0.5 ? coordinator.percentComplete : (1 - coordinator.percentComplete))
59
+        UIView.animate(withDuration: coordinator.transitionDuration * durationPercent, delay: 0, usingSpringWithDamping: 1,
60
+                       initialSpringVelocity: coordinator.completionVelocity, options: [], animations: {
61
+            navBar.transitionAnimationWithPercent(1)
62
+        }) { _ in
63
+            navBar.clear()
64
+        }
65
+    }
13 66
 }
14 67
 
15
-//class NavigationController: UINavigationController {
16
-//
17
-//    override func viewDidLoad() {
18
-//        super.viewDidLoad()
19
-//
20
-//        // Do any additional setup after loading the view.
21
-//    }
22
-//    
23
-//    func set
24
-//}
25
-//
26
-//
27
-//extension UIViewController {
28
-//    n
29
-//}
68
+extension NavigationController: UINavigationControllerDelegate {
69
+    
70
+    public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
71
+        (navigationBar as? NavigationBar)?.isPush = operation == .push
72
+        return nil
73
+    }
74
+    
75
+    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
76
+        guard let navBar = navigationBar as? NavigationBar,
77
+            navBar.needsInteractive else { return }
78
+        
79
+        guard let coordinator = transitionCoordinator,
80
+            animated else {
81
+                navBar.setBackgroundImage()
82
+                navBar.clear()
83
+                return
84
+        }
85
+        
86
+        navBar.constructViewHierarchy()
87
+        
88
+        guard !coordinator.isInteractive else { return }
89
+        
90
+        coordinator.animate(alongsideTransition: { (transitionContext) in
91
+            DispatchQueue.main.async {
92
+                UIView.beginAnimations(nil, context: nil)
93
+                UIView.setAnimationCurve(transitionContext.completionCurve)
94
+                UIView.setAnimationDuration(transitionContext.transitionDuration)
95
+                navBar.transitionAnimation()
96
+                UIView.commitAnimations()
97
+            }
98
+        }, completion: { (transitionContext) in
99
+            navBar.clear()
100
+        })
101
+    }
102
+}
103
+
104
+extension NavigationController: UIGestureRecognizerDelegate {
105
+    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
106
+        if gestureRecognizer == interactivePopGestureRecognizer {
107
+            return viewControllers.count > 1
108
+        }
109
+        return true
110
+    }
111
+}

+ 8 - 30
PaiAi/PaiaiUIKit/Reusable/UIKit/PageViewController/PageViewController.swift

@@ -72,7 +72,7 @@ open class PageViewController: UIViewController {
72 72
         constructViewHierarchy()
73 73
         activateConstraints()
74 74
         setMenuGestureRecognizer()
75
-        setupNavigationBarInteractivePopDelegate()
75
+        
76 76
     }
77 77
     
78 78
     open override func viewDidLayoutSubviews() {
@@ -90,8 +90,8 @@ open class PageViewController: UIViewController {
90 90
     }
91 91
     
92 92
     private func constructViewHierarchy() {
93
+        navigationItem.titleView = menuView
93 94
         view.addSubview(scrollView)
94
-        navigationController?.navigationBar.addSubview(menuView)
95 95
         menuView.addSubview(sliderView)
96 96
     }
97 97
 }
@@ -150,15 +150,12 @@ fileprivate extension PageViewController {
150 150
             
151 151
             let left: NSLayoutConstraint
152 152
             if let lastLabel = last {
153
-                left = label.leftAnchor
154
-                    .constraint(equalTo: lastLabel.rightAnchor, constant: option.spacing)
153
+                left = label.leftAnchor.constraint(equalTo: lastLabel.rightAnchor, constant: option.spacing)
155 154
             } else {
156
-                left = label.leadingAnchor
157
-                    .constraint(equalTo: menuView.leadingAnchor)
155
+                left = label.leadingAnchor.constraint(equalTo: menuView.leadingAnchor)
158 156
             }
159 157
             
160
-            let centerY = label.centerYAnchor
161
-                .constraint(equalTo: menuView.centerYAnchor)
158
+            let centerY = label.centerYAnchor.constraint(equalTo: menuView.centerYAnchor)
162 159
             
163 160
             if i == 0 {
164 161
                 label.textColor = option.selectedColor
@@ -178,17 +175,16 @@ fileprivate extension PageViewController {
178 175
     
179 176
     func setSliderViewDetail() {
180 177
         guard let label = menuView.viewWithTag(baseTag) else { return }
181
-        sliderConstraint = sliderView.centerXAnchor
182
-            .constraint(equalTo: label.centerXAnchor)
178
+        sliderConstraint = sliderView.centerXAnchor.constraint(equalTo: label.centerXAnchor)
183 179
         
184
-        NSLayoutConstraint.activate([sliderConstraint!])
180
+        NSLayoutConstraint.activate([sliderConstraint!,
181
+                                     sliderView.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 6)])
185 182
     }
186 183
 }
187 184
 
188 185
 /// layout
189 186
 fileprivate extension PageViewController {
190 187
     func activateConstraints() {
191
-        activateConstraintsMenuView()
192 188
         activateConstraintsSliderView()
193 189
         activateConstraintsScrollView()
194 190
     }
@@ -206,18 +202,6 @@ fileprivate extension PageViewController {
206 202
         NSLayoutConstraint.activate([width, height, top, leading, bottom, trailing])
207 203
     }
208 204
     
209
-    func activateConstraintsMenuView() {
210
-        guard let barContentView = navigationController?.navigationBar else {  return }
211
-        
212
-        menuView.translatesAutoresizingMaskIntoConstraints = false
213
-        
214
-        NSLayoutConstraint.activate([
215
-            menuView.topAnchor.constraint(equalTo: barContentView.topAnchor),
216
-            menuView.bottomAnchor.constraint(equalTo: barContentView.bottomAnchor),
217
-            menuView.centerXAnchor.constraint(equalTo: barContentView.centerXAnchor)
218
-            ])
219
-    }
220
-    
221 205
     func activateConstraintsSliderView() {
222 206
         
223 207
         sliderView.translatesAutoresizingMaskIntoConstraints = false
@@ -366,9 +350,3 @@ fileprivate extension PageViewController {
366 350
         }
367 351
     }
368 352
 }
369
-
370
-extension PageViewController: NavigationBarInteractiveViewController {    
371
-    public var navigationView: UIView {
372
-        return menuView
373
-    }
374
-}

+ 0 - 1
PaiAi/Paiai_iOS/App/Group/GroupDetail/GroupNameModificationViewController.swift

@@ -86,5 +86,4 @@ extension GroupNameModificationViewController {
86 86
     }
87 87
 }
88 88
 
89
-
90 89
 extension GroupNameModificationViewController: NavigationBackViewController {}

+ 6 - 19
PaiAi/Paiai_iOS/App/Group/GroupViewController.swift

@@ -59,6 +59,7 @@ final class GroupViewController: UIViewController {
59 59
                                       bundle: Bundle(identifier: "com.Paiai-iOS")),
60 60
                                 forCellWithReuseIdentifier: "photoCell")
61 61
         setup()
62
+        setNavigationBar()
62 63
         binding()
63 64
     }
64 65
     
@@ -149,7 +150,7 @@ fileprivate extension GroupViewController {
149 150
     }
150 151
 }
151 152
 
152
-extension GroupViewController: NavigationBarInteractiveViewController {
153
+extension GroupViewController {
153 154
     var navigationView: UIView {
154 155
         return navigationBarView
155 156
     }
@@ -157,14 +158,13 @@ extension GroupViewController: NavigationBarInteractiveViewController {
157 158
     func setNavigationBar() {
158 159
         guard navigationViewNotReady else { return }
159 160
         setRightBarButtonItems()
160
-        construvtNaivgationViewHierarchy()
161
+        constructNaivgationViewHierarchy()
161 162
         activateConstraintsNavigation()
162
-        
163 163
         navigationViewNotReady = false
164 164
     }
165 165
     
166
-    private func construvtNaivgationViewHierarchy() {
167
-        navigationController?.navigationBar.addSubview(navigationBarView)
166
+    private func constructNaivgationViewHierarchy() {
167
+        navigationItem.titleView = navigationBarView
168 168
         navigationBarView.addSubview(navigationBarViewImage)
169 169
         navigationBarView.addSubview(navigationBarViewTitle)
170 170
     }
@@ -172,7 +172,7 @@ extension GroupViewController: NavigationBarInteractiveViewController {
172 172
     private func setRightBarButtonItems() {
173 173
         let item = UIBarButtonItem(images: [UIImage(named: "navigation-QR"),
174 174
                                             UIImage(named: "navigation-right")],
175
-                                   targets: [self, viewModel],
175
+                                   targets: [self, viewModel!],
176 176
                                    actions: [#selector(GroupViewController.presentGroupQR),
177 177
                                              #selector(GroupViewModel.navigateToGroupDetail)])
178 178
 
@@ -194,23 +194,10 @@ extension GroupViewController: NavigationBarInteractiveViewController {
194 194
 fileprivate extension GroupViewController {
195 195
     
196 196
     func activateConstraintsNavigation() {
197
-        activateConstraintsNavigationBarView()
198 197
         activateConstraintsNavigationBarViewImage()
199 198
         activateConstraintsNavigationBarViewTitle()
200 199
     }
201 200
     
202
-    func activateConstraintsNavigationBarView() {
203
-        guard let barContentView = navigationController?.navigationBar else {  return }
204
-        
205
-        navigationBarView.translatesAutoresizingMaskIntoConstraints = false
206
-        
207
-        NSLayoutConstraint.activate([
208
-            navigationBarView.topAnchor.constraint(equalTo: barContentView.topAnchor),
209
-            navigationBarView.bottomAnchor.constraint(equalTo: barContentView.bottomAnchor),
210
-            navigationBarView.centerXAnchor.constraint(equalTo: barContentView.centerXAnchor)
211
-            ])
212
-    }
213
-    
214 201
     func activateConstraintsNavigationBarViewTitle() {
215 202
         navigationBarViewTitle.translatesAutoresizingMaskIntoConstraints = false
216 203
         NSLayoutConstraint.activate([

+ 3 - 2
PaiAi/Paiai_iOS/App/Home/ScanQRViewController.swift

@@ -24,7 +24,8 @@ final class ScanQRViewController: UIViewController {
24 24
     override func viewDidLoad() {
25 25
         super.viewDidLoad()
26 26
         scanView.delegate = self
27
-        viewModel.join(code: "http://pai.ai/g/SpA5be3")
27
+//        viewModel.join(code: "http://pai.ai/g/SpA5be3")
28
+        setNavigationBar()
28 29
     }
29 30
     
30 31
     func setNavigationBar() {
@@ -34,7 +35,7 @@ final class ScanQRViewController: UIViewController {
34 35
     
35 36
     override func viewWillAppear(_ animated: Bool) {
36 37
         super.viewWillAppear(animated)
37
-        setNavigationBar()
38
+        
38 39
     }
39 40
 
40 41
     override func viewWillDisappear(_ animated: Bool) {

+ 1 - 14
PaiAi/Paiai_iOS/App/Message/MessageListViewController.swift

@@ -48,7 +48,7 @@ final class MessageListViewController: UIViewController {
48 48
         setup()
49 49
         binding()
50 50
         setNavigationBar()
51
-        self.viewModel.reload()
51
+        self.viewModel.reload()        
52 52
     }
53 53
     
54 54
     private func setNavigationBar() {
@@ -174,19 +174,6 @@ fileprivate extension MessageListViewController {
174 174
                     self.tableView.endRefreshing(at: .bottom)
175 175
                 }
176 176
             }).disposed(by: disposeBag)
177
-        
178
-        viewModel.hasMoreData
179
-            .asDriver(onErrorJustReturn: true)
180
-            .drive(onNext: {[weak self] flag in
181
-                guard let `self` = self else { return }
182
-                if flag {
183
-                    if self.tableView.bottomPullToRefresh == nil {
184
-                        self.setupLoadingControl()
185
-                    }
186
-                } else {
187
-//                    self.tableViewt
188
-                }
189
-            }).disposed(by: disposeBag)
190 177
     }
191 178
 }
192 179
 

+ 0 - 13
PaiAi/Paiai_iOS/App/Mine/MineGroupViewController.swift

@@ -128,19 +128,6 @@ fileprivate extension MineGroupViewController {
128 128
                     self.tableView.endRefreshing(at: .bottom)
129 129
                 }
130 130
             }).disposed(by: disposeBag)
131
-        
132
-        viewModel.hasMoreData
133
-            .asDriver(onErrorJustReturn: true)
134
-            .drive(onNext: {[weak self] flag in
135
-                guard let `self` = self else { return }
136
-                if flag {
137
-                    if self.tableView.bottomPullToRefresh == nil {
138
-                        self.setupLoadingControl()
139
-                    }
140
-                } else {
141
-                    //                    self.tableViewt
142
-                }
143
-            }).disposed(by: disposeBag)
144 131
     }
145 132
 }
146 133
 

+ 0 - 13
PaiAi/Paiai_iOS/App/Mine/MineOrderViewController.swift

@@ -111,19 +111,6 @@ fileprivate extension MineOrderViewController {
111 111
                     self.tableView.endRefreshing(at: .bottom)
112 112
                 }
113 113
             }).disposed(by: disposeBag)
114
-        
115
-        viewModel.hasMoreData
116
-            .asDriver(onErrorJustReturn: true)
117
-            .drive(onNext: {[weak self] flag in
118
-                guard let `self` = self else { return }
119
-                if flag {
120
-                    if self.tableView.bottomPullToRefresh == nil {
121
-                        self.setupLoadingControl()
122
-                    }
123
-                } else {
124
-                    //                    self.tableViewt
125
-                }
126
-            }).disposed(by: disposeBag)
127 114
     }
128 115
 }
129 116