@@ -247,7 +247,7 @@  | 
            ||
| 247 | 247 | 
                 		05C8D21021ED7B280001E847 /* UIApplication+Swizzle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D20F21ED7B270001E847 /* UIApplication+Swizzle.swift */; };
               | 
            
| 248 | 248 | 
                 		05C8D21221ED7B620001E847 /* UINavigationBar+FixSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21121ED7B620001E847 /* UINavigationBar+FixSpace.swift */; };
               | 
            
| 249 | 249 | 
                 		05C8D21421ED8B9B0001E847 /* NavigationBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */; };
               | 
            
| 250 | 
                -		05C8D21921ED985C0001E847 /* UIViewController+NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21821ED985C0001E847 /* UIViewController+NavigationBack.swift */; };
               | 
            |
| 250 | 
                +		05C8D21921ED985C0001E847 /* UINavigationController+NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */; };
               | 
            |
| 251 | 251 | 
                 		05C8D21B21ED9A020001E847 /* UIViewController+Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21A21ED9A020001E847 /* UIViewController+Navigation.swift */; };
               | 
            
| 252 | 252 | 
                 		05C8D21D21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21C21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift */; };
               | 
            
| 253 | 253 | 
                 		05C8D22021EDD5F50001E847 /* NavigationBarInOut.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D21F21EDD5F50001E847 /* NavigationBarInOut.swift */; };
               | 
            
                @@ -256,6 +256,8 @@  | 
            ||
| 256 | 256 | 
                 		05C8D22621EEE1EB0001E847 /* NavigationBarDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22521EEE1EB0001E847 /* NavigationBarDelegate.swift */; };
               | 
            
| 257 | 257 | 
                 		05C8D22921EF0A9F0001E847 /* NavigationControllerProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22821EF0A9F0001E847 /* NavigationControllerProxy.swift */; };
               | 
            
| 258 | 258 | 
                 		05C8D22B21EF0EDC0001E847 /* NavigationControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C8D22A21EF0EDC0001E847 /* NavigationControllerDelegate.swift */; };
               | 
            
| 259 | 
                +		05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3C521FF010900A29A20 /* WebViewController.swift */; };
               | 
            |
| 260 | 
                +		05D3A3C821FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */; };
               | 
            |
| 259 | 261 | 
                 		05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
               | 
            
| 260 | 262 | 
                /* End PBXBuildFile section */  | 
            
| 261 | 263 | 
                 | 
            
                @@ -499,7 +501,7 @@  | 
            ||
| 499 | 501 | 
                 		05C8D20F21ED7B270001E847 /* UIApplication+Swizzle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Swizzle.swift"; sourceTree = "<group>"; };
               | 
            
| 500 | 502 | 
                 		05C8D21121ED7B620001E847 /* UINavigationBar+FixSpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationBar+FixSpace.swift"; sourceTree = "<group>"; };
               | 
            
| 501 | 503 | 
                 		05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackViewController.swift; sourceTree = "<group>"; };
               | 
            
| 502 | 
                -		05C8D21821ED985C0001E847 /* UIViewController+NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+NavigationBack.swift"; sourceTree = "<group>"; };
               | 
            |
| 504 | 
                +		05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+NavigationBack.swift"; sourceTree = "<group>"; };
               | 
            |
| 503 | 505 | 
                 		05C8D21A21ED9A020001E847 /* UIViewController+Navigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Navigation.swift"; sourceTree = "<group>"; };
               | 
            
| 504 | 506 | 
                 		05C8D21C21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarInteractivePopDeletegate.swift; sourceTree = "<group>"; };
               | 
            
| 505 | 507 | 
                 		05C8D21F21EDD5F50001E847 /* NavigationBarInOut.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarInOut.swift; sourceTree = "<group>"; };
               | 
            
                @@ -508,6 +510,8 @@  | 
            ||
| 508 | 510 | 
                 		05C8D22521EEE1EB0001E847 /* NavigationBarDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarDelegate.swift; sourceTree = "<group>"; };
               | 
            
| 509 | 511 | 
                 		05C8D22821EF0A9F0001E847 /* NavigationControllerProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationControllerProxy.swift; sourceTree = "<group>"; };
               | 
            
| 510 | 512 | 
                 		05C8D22A21EF0EDC0001E847 /* NavigationControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationControllerDelegate.swift; sourceTree = "<group>"; };
               | 
            
| 513 | 
                +		05D3A3C521FF010900A29A20 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = "<group>"; };
               | 
            |
| 514 | 
                +		05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GestureRecoginzier+NavigationBack.swift"; sourceTree = "<group>"; };
               | 
            |
| 511 | 515 | 
                 		05E80E2F21DF65D4006368C4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
               | 
            
| 512 | 516 | 
                 		3864C06C1CAD27EC0048ADAD /* Swift-bridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Swift-bridge.h"; sourceTree = "<group>"; };
               | 
            
| 513 | 517 | 
                 		420FDBEA1EA70A9600958CBD /* PhotoLocalStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoLocalStorage.swift; sourceTree = "<group>"; };
               | 
            
                @@ -690,6 +694,7 @@  | 
            ||
| 690 | 694 | 
                05130F6121C94C79004EF1BE /* PageViewController */,  | 
            
| 691 | 695 | 
                05130F5F21C94C79004EF1BE /* SideViewController */,  | 
            
| 692 | 696 | 
                A6CCC0731E793DD0004BCC9D /* WaterfallFlowLayout */,  | 
            
| 697 | 
                + 05D3A3C521FF010900A29A20 /* WebViewController.swift */,  | 
            |
| 693 | 698 | 
                );  | 
            
| 694 | 699 | 
                path = UIKit;  | 
            
| 695 | 700 | 
                sourceTree = "<group>";  | 
            
                @@ -1145,7 +1150,8 @@  | 
            ||
| 1145 | 1150 | 
                children = (  | 
            
| 1146 | 1151 | 
                05C8D21321ED8B9B0001E847 /* NavigationBackViewController.swift */,  | 
            
| 1147 | 1152 | 
                0500C26421E8644E009A7013 /* NavigationBackDelegate.swift */,  | 
            
| 1148 | 
                - 05C8D21821ED985C0001E847 /* UIViewController+NavigationBack.swift */,  | 
            |
| 1153 | 
                + 05D3A3C721FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift */,  | 
            |
| 1154 | 
                + 05C8D21821ED985C0001E847 /* UINavigationController+NavigationBack.swift */,  | 
            |
| 1149 | 1155 | 
                );  | 
            
| 1150 | 1156 | 
                path = NavigationBack;  | 
            
| 1151 | 1157 | 
                sourceTree = "<group>";  | 
            
                @@ -1681,6 +1687,7 @@  | 
            ||
| 1681 | 1687 | 
                05C8D22221EED6860001E847 /* NavigationBarInteractiveViewController.swift in Sources */,  | 
            
| 1682 | 1688 | 
                0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */,  | 
            
| 1683 | 1689 | 
                0513100721CA1B39004EF1BE /* UIViewController+UIBarButtonItem.swift in Sources */,  | 
            
| 1690 | 
                + 05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */,  | 
            |
| 1684 | 1691 | 
                053E126B21F5696E00A64893 /* Toast.swift in Sources */,  | 
            
| 1685 | 1692 | 
                0500C26521E8644E009A7013 /* NavigationBackDelegate.swift in Sources */,  | 
            
| 1686 | 1693 | 
                057317A221F5C6A0009B2FCE /* BottomDefaultItem.swift in Sources */,  | 
            
                @@ -1711,7 +1718,8 @@  | 
            ||
| 1711 | 1718 | 
                0513109521CA3915004EF1BE /* QRCodeScanDelegate.swift in Sources */,  | 
            
| 1712 | 1719 | 
                0584FD7E21FABD9D00FA1E3E /* PresentViewController.swift in Sources */,  | 
            
| 1713 | 1720 | 
                053E126521F1718E00A64893 /* PageOption.swift in Sources */,  | 
            
| 1714 | 
                - 05C8D21921ED985C0001E847 /* UIViewController+NavigationBack.swift in Sources */,  | 
            |
| 1721 | 
                + 05C8D21921ED985C0001E847 /* UINavigationController+NavigationBack.swift in Sources */,  | 
            |
| 1722 | 
                + 05D3A3C821FFF67F00A29A20 /* GestureRecoginzier+NavigationBack.swift in Sources */,  | 
            |
| 1715 | 1723 | 
                05130F5A21C94C12004EF1BE /* PresentDisappearAnimatedTransitioning.swift in Sources */,  | 
            
| 1716 | 1724 | 
                053E126D21F5767300A64893 /* ToastAnimator.swift in Sources */,  | 
            
| 1717 | 1725 | 
                053E126721F1719F00A64893 /* PageItem.swift in Sources */,  | 
            
                @@ -45,7 +45,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
               | 
            ||
| 45 | 45 | 
                window?.rootViewController = nav  | 
            
| 46 | 46 | 
                window?.makeKeyAndVisible()  | 
            
| 47 | 47 | 
                 | 
            
| 48 | 
                - coordinator = AppCoordinator(rootViewController)  | 
            |
| 48 | 
                + coordinator = AppCoordinator(rootViewController, navigationController: nav)  | 
            |
| 49 | 49 | 
                 | 
            
| 50 | 50 | 
                nav.navigationBar.tintColor = UIColor.white  | 
            
| 51 | 51 | 
                nav.navigationBar.isTranslucent = false  | 
            
                @@ -9,9 +9,12 @@  | 
            ||
| 9 | 9 | 
                import Foundation  | 
            
| 10 | 10 | 
                import RxSwift  | 
            
| 11 | 11 | 
                 | 
            
| 12 | 
                -struct FeedbackRemoteAPI {
               | 
            |
| 13 | 
                -    func submit(text: String) -> Completable {
               | 
            |
| 14 | 
                - let resource = StatusResource(path: .feedback, parameter: ["user_id": "", "feedback": text])  | 
            |
| 12 | 
                +public struct FeedbackRemoteAPI {
               | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                +    public init() {}
               | 
            |
| 15 | 
                +  | 
            |
| 16 | 
                +    public func submit(text: String) -> Completable {
               | 
            |
| 17 | 
                + let resource = StatusResource(path: .feedback, parameter: ["user_id": ShareUserId, "feedback": text])  | 
            |
| 15 | 18 | 
                return resource.getStatus()  | 
            
| 16 | 19 | 
                }  | 
            
| 17 | 20 | 
                }  | 
            
                @@ -28,7 +28,6 @@ struct StatusResource: Resource {
               | 
            ||
| 28 | 28 | 
                 | 
            
| 29 | 29 | 
                     func getStatus() -> Completable {
               | 
            
| 30 | 30 | 
                         return NetworkApi.share.post(resource: self).flatMapCompletable({ (model) -> Completable in
               | 
            
| 31 | 
                - print(model)  | 
            |
| 32 | 31 | 
                             if model.status == 200 {
               | 
            
| 33 | 32 | 
                return Completable.empty()  | 
            
| 34 | 33 | 
                             } else {
               | 
            
                @@ -17,6 +17,8 @@ class MineFeedbackViewModel {
               | 
            ||
| 17 | 17 | 
                var api = FeedbackRemoteAPI()  | 
            
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                     func submit(_ text: String) {
               | 
            
| 20 | 
                - api.submit(text: text)  | 
            |
| 20 | 
                +        api.submit(text: text).subscribe(onCompleted: {
               | 
            |
| 21 | 
                + self.delegate?.back()  | 
            |
| 22 | 
                + }).dispose()  | 
            |
| 21 | 23 | 
                }  | 
            
| 22 | 24 | 
                }  | 
            
                @@ -60,7 +60,6 @@ public class MineGroupViewModel {
               | 
            ||
| 60 | 60 | 
                repository.load(page: page)  | 
            
| 61 | 61 | 
                .asDriver(onErrorJustReturn: NetworkArrayData<GroupItem>.empty())  | 
            
| 62 | 62 | 
                             .drive(onNext: {[weak self] (model) in
               | 
            
| 63 | 
                - print(model)  | 
            |
| 64 | 63 | 
                                 guard let `self` = self else { return }
               | 
            
| 65 | 64 | 
                self._hasMoreData.onNext(model.hasMore)  | 
            
| 66 | 65 | 
                self._isEmpty.accept(!model.data.isEmpty)  | 
            
                @@ -56,7 +56,6 @@ public class MineOrderViewModel {
               | 
            ||
| 56 | 56 | 
                repository.load(page: page)  | 
            
| 57 | 57 | 
                .asDriver(onErrorJustReturn: NetworkArrayData<OrderItem>.empty())  | 
            
| 58 | 58 | 
                             .drive(onNext: {[weak self] (model) in
               | 
            
| 59 | 
                - print(model)  | 
            |
| 60 | 59 | 
                                 guard let `self` = self else { return }
               | 
            
| 61 | 60 | 
                self._hasMoreData.onNext(model.hasMore)  | 
            
| 62 | 61 | 
                self._isEmpty.accept(!model.data.isEmpty)  | 
            
                @@ -0,0 +1,24 @@  | 
            ||
| 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 | 
                +}  | 
            
                @@ -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 NavigationBackDelegate: class {
               | 
            
| 12 | 12 | 
                func setupNavigationBackItem()  | 
            
                @@ -19,7 +19,7 @@ public extension NavigationBackDelegate where Self: UIViewController {
               | 
            ||
| 19 | 19 | 
                btn.contentHorizontalAlignment = .left  | 
            
| 20 | 20 | 
                btn.frame = CGRect(x: 0, y: 0, width: 40 , height: 40)  | 
            
| 21 | 21 | 
                btn.setImage(UIImage(named: "navigation-back"), for: .normal)  | 
            
| 22 | 
                - btn.addTarget(self, action: #selector(backToViewController), for: .touchUpInside)  | 
            |
| 22 | 
                + btn.addTarget(self, action: #selector(navigationController?.popViewController(animated:)), for: .touchUpInside)  | 
            |
| 23 | 23 | 
                 | 
            
| 24 | 24 | 
                let backItem = UIBarButtonItem(customView: btn)  | 
            
| 25 | 25 | 
                let spaceItem = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)  | 
            
                @@ -28,18 +28,3 @@ public extension NavigationBackDelegate where Self: UIViewController {
               | 
            ||
| 28 | 28 | 
                navigationItem.leftBarButtonItems = [spaceItem, backItem]  | 
            
| 29 | 29 | 
                }  | 
            
| 30 | 30 | 
                }  | 
            
| 31 | 
                -  | 
            |
| 32 | 
                -public extension GestureRecognizerDelegate where Self: UIViewController & NavigationBackDelegate {
               | 
            |
| 33 | 
                - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            |
| 34 | 
                -                           shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
               | 
            |
| 35 | 
                - if gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer,  | 
            |
| 36 | 
                - gestureRecognizer.isKind(of: UIPanGestureRecognizer.self),  | 
            |
| 37 | 
                -            let pan = gestureRecognizer as? UIPanGestureRecognizer {
               | 
            |
| 38 | 
                - let point = pan.translation(in: self.view)  | 
            |
| 39 | 
                -            if point.x > 0 {
               | 
            |
| 40 | 
                - return true  | 
            |
| 41 | 
                - }  | 
            |
| 42 | 
                - }  | 
            |
| 43 | 
                - return false  | 
            |
| 44 | 
                - }  | 
            |
| 45 | 
                -}  | 
            
                @@ -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 typealias NavigationBackViewController = NavigationBackDelegate & GestureRecognizerDelegate  | 
            
| 12 | 12 | 
                 | 
            
                @@ -0,0 +1,19 @@  | 
            ||
| 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 | 
                + pushViewController(vc, animated: animted)  | 
            |
| 15 | 
                +        guard let recognizer = interactivePopGestureRecognizer else { return }
               | 
            |
| 16 | 
                + recognizer.isEnabled = true  | 
            |
| 17 | 
                + recognizer.setDelegate(vc)  | 
            |
| 18 | 
                + }  | 
            |
| 19 | 
                +}  | 
            
                @@ -1,22 +0,0 @@  | 
            ||
| 1 | 
                -//  | 
            |
| 2 | 
                -// UIViewController+NavigationBack.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 extension UIViewController {
               | 
            |
| 12 | 
                -    func pushViewController<T: UIViewController & NavigationBackViewController>(_ vc: T, animted: Bool = true) {
               | 
            |
| 13 | 
                - vc.setupNavigationBackItem()  | 
            |
| 14 | 
                - navigationController?.pushViewController(vc, animated: animted)  | 
            |
| 15 | 
                - vc.navigationController?.interactivePopGestureRecognizer?.setDelegate(vc)  | 
            |
| 16 | 
                - vc.navigationController?.interactivePopGestureRecognizer?.isEnabled = true  | 
            |
| 17 | 
                - }  | 
            |
| 18 | 
                -  | 
            |
| 19 | 
                -    @objc func backToViewController() {
               | 
            |
| 20 | 
                - popController(animated: true)  | 
            |
| 21 | 
                - }  | 
            |
| 22 | 
                -}  | 
            
                @@ -41,6 +41,4 @@ extension UIViewController {
               | 
            ||
| 41 | 41 | 
                     func calculatePercentageOfOffsets(point: CGPoint) -> CGFloat {
               | 
            
| 42 | 42 | 
                return point.x / view.bounds.width  | 
            
| 43 | 43 | 
                }  | 
            
| 44 | 
                -  | 
            |
| 45 | 44 | 
                }  | 
            
| 46 | 
                -  | 
            
                @@ -8,8 +8,8 @@  | 
            ||
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                import Foundation  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 
                -extension GestureRecognizerDelegate where Self: UIViewController & PresentAnimatorDelegate {
               | 
            |
| 12 | 
                - public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            |
| 11 | 
                +public extension GestureRecognizerDelegate where Self: UIViewController & PresentAnimatorDelegate {
               | 
            |
| 12 | 
                + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            |
| 13 | 13 | 
                                                   shouldReceive touch: UITouch) -> Bool {
               | 
            
| 14 | 14 | 
                         if touch.view == view {
               | 
            
| 15 | 15 | 
                return true  | 
            
                @@ -18,14 +18,14 @@ extension GestureRecognizerDelegate where Self: UIViewController & PresentAnimat  | 
            ||
| 18 | 18 | 
                }  | 
            
| 19 | 19 | 
                }  | 
            
| 20 | 20 | 
                 | 
            
| 21 | 
                -extension ViewControllerTransitioningDelegate where Self: UIViewController & PresentAnimatorDelegate {
               | 
            |
| 22 | 
                -    public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
               | 
            |
| 21 | 
                +public extension ViewControllerTransitioningDelegate where Self: UIViewController & PresentAnimatorDelegate {
               | 
            |
| 22 | 
                +    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
               | 
            |
| 23 | 23 | 
                let transitioning = PresentDisappearAnimatedTransitioning(animator: animator)  | 
            
| 24 | 24 | 
                transitioning.delegate = self  | 
            
| 25 | 25 | 
                return transitioning  | 
            
| 26 | 26 | 
                }  | 
            
| 27 | 27 | 
                 | 
            
| 28 | 
                - public func animationController(forPresented presented: UIViewController,  | 
            |
| 28 | 
                + func animationController(forPresented presented: UIViewController,  | 
            |
| 29 | 29 | 
                presenting: UIViewController, source: UIViewController)  | 
            
| 30 | 30 | 
                         -> UIViewControllerAnimatedTransitioning? {
               | 
            
| 31 | 31 | 
                let transitioning = PresentAppearAnimatedTransitioning(animator: animator)  | 
            
                @@ -0,0 +1,41 @@  | 
            ||
| 1 | 
                +//  | 
            |
| 2 | 
                +// WebViewController.swift  | 
            |
| 3 | 
                +// PaiaiUIKit  | 
            |
| 4 | 
                +//  | 
            |
| 5 | 
                +// Created by ffib on 2019/1/28.  | 
            |
| 6 | 
                +// Copyright © 2019 yb. All rights reserved.  | 
            |
| 7 | 
                +//  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +import UIKit  | 
            |
| 10 | 
                +import WebKit  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                +public class WebViewController: UIViewController {
               | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                + public private(set) var path: String?  | 
            |
| 15 | 
                +  | 
            |
| 16 | 
                +    lazy var webView: WKWebView = {
               | 
            |
| 17 | 
                + let webView = WKWebView()  | 
            |
| 18 | 
                + webView.frame = CGRect(x: 0, y: 0, width: view.width, height: view.height)  | 
            |
| 19 | 
                + return webView  | 
            |
| 20 | 
                + }()  | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                +    public init(title: String, path: String) {
               | 
            |
| 23 | 
                + super.init(nibName: nil, bundle: nil)  | 
            |
| 24 | 
                + self.title = title  | 
            |
| 25 | 
                + self.path = path  | 
            |
| 26 | 
                + }  | 
            |
| 27 | 
                +  | 
            |
| 28 | 
                +    required init?(coder aDecoder: NSCoder) {
               | 
            |
| 29 | 
                +        fatalError("init(coder:) has not been implemented")
               | 
            |
| 30 | 
                + }  | 
            |
| 31 | 
                +  | 
            |
| 32 | 
                +    override public func viewDidLoad() {
               | 
            |
| 33 | 
                + super.viewDidLoad()  | 
            |
| 34 | 
                + view.backgroundColor = UIColor.white  | 
            |
| 35 | 
                + view.addSubview(webView)  | 
            |
| 36 | 
                +        guard let url = URL(string: path ?? "") else { return }
               | 
            |
| 37 | 
                + webView.load(URLRequest(url: url))  | 
            |
| 38 | 
                + }  | 
            |
| 39 | 
                +}  | 
            |
| 40 | 
                +  | 
            |
| 41 | 
                +extension WebViewController: NavigationBackViewController {}
               | 
            
                @@ -19,7 +19,7 @@ public protocol GestureRecognizerDelegate: class {
               | 
            ||
| 19 | 19 | 
                 public extension GestureRecognizerDelegate {
               | 
            
| 20 | 20 | 
                func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            
| 21 | 21 | 
                                            shouldReceive touch: UITouch) -> Bool {
               | 
            
| 22 | 
                - return false  | 
            |
| 22 | 
                + return true  | 
            |
| 23 | 23 | 
                }  | 
            
| 24 | 24 | 
                 | 
            
| 25 | 25 | 
                func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            
                @@ -16,8 +16,14 @@ class GestureRecognizerProxy: NSObject, UIGestureRecognizerDelegate {
               | 
            ||
| 16 | 16 | 
                }  | 
            
| 17 | 17 | 
                 | 
            
| 18 | 18 | 
                     func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
               | 
            
| 19 | 
                -        guard let delegate = delegate else { return false }
               | 
            |
| 20 | 
                - return delegate.gestureRecognizer(gestureRecognizer, shouldReceive: touch)  | 
            |
| 19 | 
                +        guard let d = delegate else { return false }
               | 
            |
| 20 | 
                + return d.gestureRecognizer(gestureRecognizer, shouldReceive: touch)  | 
            |
| 21 | 
                + }  | 
            |
| 22 | 
                +  | 
            |
| 23 | 
                + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,  | 
            |
| 24 | 
                +                           shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
               | 
            |
| 25 | 
                +        guard let d = delegate else { return false }
               | 
            |
| 26 | 
                + return d.gestureRecognizer(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer)  | 
            |
| 21 | 27 | 
                }  | 
            
| 22 | 28 | 
                }  | 
            
| 23 | 29 | 
                 | 
            
                @@ -8,7 +8,7 @@  | 
            ||
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                import Foundation  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 
                -public protocol ViewControllerTransitioningDelegate: class {
               | 
            |
| 11 | 
                +public protocol ViewControllerTransitioningDelegate where Self: UIViewController {
               | 
            |
| 12 | 12 | 
                func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?  | 
            
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                func animationController(forPresented presented: UIViewController,  | 
            
                @@ -9,7 +9,7 @@  | 
            ||
| 9 | 9 | 
                import Foundation  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 11 | 
                 class ViewControllerTransitioningProxy: NSObject, UIViewControllerTransitioningDelegate {
               | 
            
| 12 | 
                - weak var delegate: ViewControllerTransitioningDelegate?  | 
            |
| 12 | 
                + var delegate: ViewControllerTransitioningDelegate?  | 
            |
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                     init(target: ViewControllerTransitioningDelegate) {
               | 
            
| 15 | 15 | 
                delegate = target  | 
            
                @@ -25,15 +25,17 @@ public final class AppCoordinator {
               | 
            ||
| 25 | 25 | 
                 | 
            
| 26 | 26 | 
                var shareUserInfoViewModel = UserInfoViewModel()  | 
            
| 27 | 27 | 
                var containerViewController: ContainerViewController  | 
            
| 28 | 
                + var navigationController: UINavigationController  | 
            |
| 28 | 29 | 
                 | 
            
| 29 | 30 | 
                fileprivate var coordinators = [CoordinatorKey: Coordinator]()  | 
            
| 30 | 31 | 
                 | 
            
| 31 | 
                -    public init(_ containerVC: ContainerViewController) {
               | 
            |
| 32 | 
                - containerViewController = containerVC  | 
            |
| 32 | 
                +    public init(_ containerVC: ContainerViewController, navigationController: UINavigationController) {
               | 
            |
| 33 | 
                + self.containerViewController = containerVC  | 
            |
| 34 | 
                + self.navigationController = navigationController  | 
            |
| 33 | 35 | 
                containerViewController.delegate = self  | 
            
| 34 | 36 | 
                containerViewController.userInfo = shareUserInfoViewModel  | 
            
| 35 | 37 | 
                 | 
            
| 36 | 
                - self.containerViewController.loadViewIfNeeded()  | 
            |
| 38 | 
                + containerViewController.loadViewIfNeeded()  | 
            |
| 37 | 39 | 
                 | 
            
| 38 | 40 | 
                 | 
            
| 39 | 41 | 
                let homeVC = makeHomeViewController()  | 
            
                @@ -57,7 +59,7 @@ public final class AppCoordinator {
               | 
            ||
| 57 | 59 | 
                 extension AppCoordinator: ContainerViewControllerDelegate {
               | 
            
| 58 | 60 | 
                     func presentLogin() {
               | 
            
| 59 | 61 | 
                let loginVC = makeLoginViewController()  | 
            
| 60 | 
                - containerViewController.navigationController?.addFullScreen(childViewController: loginVC)  | 
            |
| 62 | 
                + navigationController.addFullScreen(childViewController: loginVC)  | 
            |
| 61 | 63 | 
                }  | 
            
| 62 | 64 | 
                 | 
            
| 63 | 65 | 
                     func presentMine() {
               | 
            
                @@ -72,7 +74,7 @@ fileprivate extension AppCoordinator {
               | 
            ||
| 72 | 74 | 
                     func makeMineCoordinator() -> MineCoordinator {
               | 
            
| 73 | 75 | 
                let mineVC = makeMineViewController()  | 
            
| 74 | 76 | 
                mineVC.userInfoViewModel = shareUserInfoViewModel  | 
            
| 75 | 
                - let mineCoordinator = MineCoordinator(mineVC, containerViewController: containerViewController)  | 
            |
| 77 | 
                + let mineCoordinator = MineCoordinator(mineVC, navigationController: navigationController)  | 
            |
| 76 | 78 | 
                 | 
            
| 77 | 79 | 
                return mineCoordinator  | 
            
| 78 | 80 | 
                }  | 
            
                @@ -200,175 +200,166 @@  | 
            ||
| 200 | 200 | 
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Str-BX-Lky" userLabel="View-up">  | 
            
| 201 | 201 | 
                <rect key="frame" x="0.0" y="20" width="375" height="216"/>  | 
            
| 202 | 202 | 
                <subviews>  | 
            
| 203 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Logo" translatesAutoresizingMaskIntoConstraints="NO" id="B7y-Jl-E7G">  | 
            |
| 204 | 
                - <rect key="frame" x="117" y="38" width="140" height="140"/>  | 
            |
| 205 | 
                - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>  | 
            |
| 203 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Logo" translatesAutoresizingMaskIntoConstraints="NO" id="B7y-Jl-E7G">  | 
            |
| 204 | 
                + <rect key="frame" x="117.5" y="38" width="140" height="140"/>  | 
            |
| 206 | 205 | 
                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 207 | 206 | 
                </imageView>  | 
            
| 208 | 
                - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="npC-T1-7h9">  | 
            |
| 209 | 
                - <rect key="frame" x="0.0" y="215.5" width="375" height="0.5"/>  | 
            |
| 210 | 
                - <color key="backgroundColor" red="0.90588235294117647" green="0.90588235294117647" blue="0.90588235294117647" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 211 | 
                - <constraints>  | 
            |
| 212 | 
                - <constraint firstAttribute="height" constant="0.5" id="nzr-dW-ELC"/>  | 
            |
| 213 | 
                - </constraints>  | 
            |
| 214 | 
                - </view>  | 
            |
| 215 | 207 | 
                </subviews>  | 
            
| 216 | 208 | 
                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 217 | 209 | 
                <constraints>  | 
            
| 218 | 
                - <constraint firstAttribute="bottom" secondItem="npC-T1-7h9" secondAttribute="bottom" id="pRQ-2f-mC5"/>  | 
            |
| 210 | 
                + <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerX" secondItem="Str-BX-Lky" secondAttribute="centerX" id="5Hv-0h-6dw"/>  | 
            |
| 211 | 
                + <constraint firstItem="B7y-Jl-E7G" firstAttribute="centerY" secondItem="Str-BX-Lky" secondAttribute="centerY" id="ffl-F6-a1m"/>  | 
            |
| 219 | 212 | 
                <constraint firstAttribute="height" constant="216" id="qV0-pB-Hya"/>  | 
            
| 220 | 
                - <constraint firstAttribute="trailing" secondItem="npC-T1-7h9" secondAttribute="trailing" id="qgp-rj-Xim"/>  | 
            |
| 221 | 
                - <constraint firstItem="npC-T1-7h9" firstAttribute="leading" secondItem="Str-BX-Lky" secondAttribute="leading" id="rwW-jP-aMz"/>  | 
            |
| 222 | 213 | 
                </constraints>  | 
            
| 223 | 214 | 
                </view>  | 
            
| 224 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="版本:1.0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bEV-QT-Egq">  | 
            |
| 225 | 
                - <rect key="frame" x="161" y="326" width="53" height="15"/>  | 
            |
| 226 | 
                - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>  | 
            |
| 227 | 
                - <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 228 | 
                - <fontDescription key="fontDescription" type="system" pointSize="12"/>  | 
            |
| 229 | 
                - <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 230 | 
                - <nil key="highlightedColor"/>  | 
            |
| 231 | 
                - </label>  | 
            |
| 232 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Copyright@xfoto" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="inH-WZ-fdD">  | 
            |
| 233 | 
                - <rect key="frame" x="146" y="327" width="82" height="12"/>  | 
            |
| 234 | 
                - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>  | 
            |
| 235 | 
                - <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 236 | 
                - <fontDescription key="fontDescription" type="system" pointSize="10"/>  | 
            |
| 237 | 
                - <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 238 | 
                - <nil key="highlightedColor"/>  | 
            |
| 239 | 
                - </label>  | 
            |
| 240 | 215 | 
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bjC-jQ-LOw" userLabel="View-down">  | 
            
| 241 | 216 | 
                <rect key="frame" x="-4" y="236" width="383" height="431"/>  | 
            
| 242 | 217 | 
                <subviews>  | 
            
| 243 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bc2-xm-kqy">  | 
            |
| 218 | 
                + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mae-VW-ed0" userLabel="Contact Us View">  | 
            |
| 244 | 219 | 
                <rect key="frame" x="0.0" y="0.0" width="383" height="48"/>  | 
            
| 245 | 
                - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 220 | 
                + <subviews>  | 
            |
| 221 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-contactUs" translatesAutoresizingMaskIntoConstraints="NO" id="pVB-Uy-xXH">  | 
            |
| 222 | 
                + <rect key="frame" x="16" y="8" width="32" height="32"/>  | 
            |
| 223 | 
                + </imageView>  | 
            |
| 224 | 
                + <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">  | 
            |
| 225 | 
                + <rect key="frame" x="62" y="14" width="66" height="20"/>  | 
            |
| 226 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 227 | 
                + <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 228 | 
                + <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 229 | 
                + <nil key="highlightedColor"/>  | 
            |
| 230 | 
                + </label>  | 
            |
| 231 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="MgR-ta-3jg">  | 
            |
| 232 | 
                + <rect key="frame" x="349" y="6" width="24" height="36"/>  | 
            |
| 233 | 
                + </imageView>  | 
            |
| 234 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L1g-sb-a5F">  | 
            |
| 235 | 
                + <rect key="frame" x="0.0" y="0.0" width="383" height="48"/>  | 
            |
| 236 | 
                + </button>  | 
            |
| 237 | 
                + </subviews>  | 
            |
| 238 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  | 
            |
| 246 | 239 | 
                <constraints>  | 
            
| 247 | 
                - <constraint firstAttribute="height" constant="48" id="dUM-cx-mcg"/>  | 
            |
| 240 | 
                + <constraint firstItem="L1g-sb-a5F" firstAttribute="top" secondItem="mae-VW-ed0" secondAttribute="top" id="Ed3-hb-G04"/>  | 
            |
| 241 | 
                + <constraint firstAttribute="trailing" secondItem="L1g-sb-a5F" secondAttribute="trailing" id="MIe-EG-igO"/>  | 
            |
| 242 | 
                + <constraint firstAttribute="height" constant="48" id="PV0-Cp-bDh"/>  | 
            |
| 243 | 
                + <constraint firstAttribute="trailing" secondItem="MgR-ta-3jg" secondAttribute="trailing" constant="10" id="Q57-4S-ScE"/>  | 
            |
| 244 | 
                + <constraint firstItem="pVB-Uy-xXH" firstAttribute="centerY" secondItem="mae-VW-ed0" secondAttribute="centerY" id="b8r-oD-lev"/>  | 
            |
| 245 | 
                + <constraint firstItem="CYk-cu-pHl" firstAttribute="centerY" secondItem="mae-VW-ed0" secondAttribute="centerY" id="dY3-5f-FtW"/>  | 
            |
| 246 | 
                + <constraint firstItem="L1g-sb-a5F" firstAttribute="leading" secondItem="mae-VW-ed0" secondAttribute="leading" id="opM-NR-KZp"/>  | 
            |
| 247 | 
                + <constraint firstItem="CYk-cu-pHl" firstAttribute="leading" secondItem="pVB-Uy-xXH" secondAttribute="trailing" constant="14" id="rbD-xv-H9b"/>  | 
            |
| 248 | 
                + <constraint firstItem="pVB-Uy-xXH" firstAttribute="leading" secondItem="mae-VW-ed0" secondAttribute="leading" constant="16" id="tjz-M3-idT"/>  | 
            |
| 249 | 
                + <constraint firstItem="MgR-ta-3jg" firstAttribute="centerY" secondItem="mae-VW-ed0" secondAttribute="centerY" id="xBY-9U-DXI"/>  | 
            |
| 250 | 
                + <constraint firstAttribute="bottom" secondItem="L1g-sb-a5F" secondAttribute="bottom" id="ygQ-9N-YQv"/>  | 
            |
| 248 | 251 | 
                </constraints>  | 
            
| 249 | 
                - <connections>  | 
            |
| 250 | 
                - <action selector="contactUs:" destination="P7c-Sd-BXp" eventType="touchUpInside" id="8Ev-Oz-oSg"/>  | 
            |
| 251 | 
                - </connections>  | 
            |
| 252 | 
                - </button>  | 
            |
| 253 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="MgR-ta-3jg">  | 
            |
| 254 | 
                - <rect key="frame" x="349" y="6" width="24" height="36"/>  | 
            |
| 255 | 
                - </imageView>  | 
            |
| 256 | 
                - <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">  | 
            |
| 257 | 
                - <rect key="frame" x="62" y="14" width="66" height="20"/>  | 
            |
| 258 | 
                - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 259 | 
                - <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 260 | 
                - <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 261 | 
                - <nil key="highlightedColor"/>  | 
            |
| 262 | 
                - </label>  | 
            |
| 263 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="关于-联系我们" translatesAutoresizingMaskIntoConstraints="NO" id="pVB-Uy-xXH">  | 
            |
| 264 | 
                - <rect key="frame" x="16" y="8" width="32" height="32"/>  | 
            |
| 265 | 
                - </imageView>  | 
            |
| 266 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kL5-iA-2wt">  | 
            |
| 252 | 
                + </view>  | 
            |
| 253 | 
                + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EVY-h5-0pO" userLabel="Score View">  | 
            |
| 267 | 254 | 
                <rect key="frame" x="0.0" y="48" width="383" height="48"/>  | 
            
| 268 | 
                - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 269 | 
                - <constraints>  | 
            |
| 270 | 
                - <constraint firstAttribute="height" constant="48" id="hWI-j6-a3r"/>  | 
            |
| 271 | 
                - </constraints>  | 
            |
| 272 | 
                - <connections>  | 
            |
| 273 | 
                - <action selector="giveFen" destination="P7c-Sd-BXp" eventType="touchUpInside" id="Mhu-Cp-5xa"/>  | 
            |
| 274 | 
                - </connections>  | 
            |
| 275 | 
                - </button>  | 
            |
| 276 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="u4d-zF-dTA">  | 
            |
| 277 | 
                - <rect key="frame" x="349" y="54" width="24" height="36"/>  | 
            |
| 278 | 
                - </imageView>  | 
            |
| 279 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="给我评分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sh6-Re-Ry3">  | 
            |
| 280 | 
                - <rect key="frame" x="62" y="62" width="66" height="20"/>  | 
            |
| 281 | 
                - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 282 | 
                - <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 283 | 
                - <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 284 | 
                - <nil key="highlightedColor"/>  | 
            |
| 285 | 
                - </label>  | 
            |
| 286 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="关于-评分" translatesAutoresizingMaskIntoConstraints="NO" id="Nm2-xx-B3w">  | 
            |
| 287 | 
                - <rect key="frame" x="16" y="56" width="32" height="32"/>  | 
            |
| 288 | 
                - </imageView>  | 
            |
| 289 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ibz-oi-jAe">  | 
            |
| 290 | 
                - <rect key="frame" x="0.0" y="96" width="383" height="48"/>  | 
            |
| 291 | 
                - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 292 | 
                - <constraints>  | 
            |
| 293 | 
                - <constraint firstAttribute="height" constant="48" id="rIP-jA-Fo4"/>  | 
            |
| 294 | 
                - </constraints>  | 
            |
| 295 | 
                - <connections>  | 
            |
| 296 | 
                - <action selector="userAgreement:" destination="P7c-Sd-BXp" eventType="touchUpInside" id="nSF-oE-Pbk"/>  | 
            |
| 297 | 
                - </connections>  | 
            |
| 298 | 
                - </button>  | 
            |
| 299 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="YSe-Bt-0NL">  | 
            |
| 300 | 
                - <rect key="frame" x="349" y="102" width="24" height="36"/>  | 
            |
| 301 | 
                - </imageView>  | 
            |
| 302 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kxq-PT-sYi">  | 
            |
| 303 | 
                - <rect key="frame" x="62" y="110" width="66" height="20"/>  | 
            |
| 304 | 
                - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 305 | 
                - <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 306 | 
                - <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 307 | 
                - <nil key="highlightedColor"/>  | 
            |
| 308 | 
                - </label>  | 
            |
| 309 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="关于-用户协议 " translatesAutoresizingMaskIntoConstraints="NO" id="CK4-vq-4yz">  | 
            |
| 310 | 
                - <rect key="frame" x="16" y="104" width="32" height="32"/>  | 
            |
| 311 | 
                - </imageView>  | 
            |
| 312 | 
                - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UVV-rB-BFU">  | 
            |
| 313 | 
                - <rect key="frame" x="62" y="95.5" width="321" height="0.5"/>  | 
            |
| 314 | 
                - <color key="backgroundColor" red="0.90588235289999997" green="0.90588235289999997" blue="0.90588235289999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 255 | 
                + <subviews>  | 
            |
| 256 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-score" translatesAutoresizingMaskIntoConstraints="NO" id="0O4-xB-jPJ">  | 
            |
| 257 | 
                + <rect key="frame" x="16" y="8" width="32" height="32"/>  | 
            |
| 258 | 
                + </imageView>  | 
            |
| 259 | 
                + <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">  | 
            |
| 260 | 
                + <rect key="frame" x="62" y="14" width="66" height="20"/>  | 
            |
| 261 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 262 | 
                + <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 263 | 
                + <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 264 | 
                + <nil key="highlightedColor"/>  | 
            |
| 265 | 
                + </label>  | 
            |
| 266 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="vLw-Zd-Mis">  | 
            |
| 267 | 
                + <rect key="frame" x="349" y="6" width="24" height="36"/>  | 
            |
| 268 | 
                + </imageView>  | 
            |
| 269 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FIE-jb-ZGu">  | 
            |
| 270 | 
                + <rect key="frame" x="0.0" y="0.0" width="383" height="48"/>  | 
            |
| 271 | 
                + </button>  | 
            |
| 272 | 
                + </subviews>  | 
            |
| 273 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  | 
            |
| 315 | 274 | 
                <constraints>  | 
            
| 316 | 
                - <constraint firstAttribute="height" constant="0.5" id="A4X-Nh-oXs"/>  | 
            |
| 275 | 
                + <constraint firstItem="vLw-Zd-Mis" firstAttribute="centerY" secondItem="EVY-h5-0pO" secondAttribute="centerY" id="1E7-1z-kZ7"/>  | 
            |
| 276 | 
                + <constraint firstItem="0O4-xB-jPJ" firstAttribute="centerY" secondItem="EVY-h5-0pO" secondAttribute="centerY" id="ALT-hh-MTM"/>  | 
            |
| 277 | 
                + <constraint firstItem="FIE-jb-ZGu" firstAttribute="leading" secondItem="EVY-h5-0pO" secondAttribute="leading" id="D6N-Si-qSV"/>  | 
            |
| 278 | 
                + <constraint firstItem="JAf-2j-KJO" firstAttribute="centerY" secondItem="EVY-h5-0pO" secondAttribute="centerY" id="KPu-br-EtQ"/>  | 
            |
| 279 | 
                + <constraint firstItem="FIE-jb-ZGu" firstAttribute="top" secondItem="EVY-h5-0pO" secondAttribute="top" id="b5a-HR-UrD"/>  | 
            |
| 280 | 
                + <constraint firstItem="0O4-xB-jPJ" firstAttribute="leading" secondItem="EVY-h5-0pO" secondAttribute="leading" constant="16" id="cMg-7o-zGG"/>  | 
            |
| 281 | 
                + <constraint firstAttribute="trailing" secondItem="vLw-Zd-Mis" secondAttribute="trailing" constant="10" id="dMD-tt-A3K"/>  | 
            |
| 282 | 
                + <constraint firstAttribute="height" constant="48" id="fsu-NH-yPo"/>  | 
            |
| 283 | 
                + <constraint firstAttribute="bottom" secondItem="FIE-jb-ZGu" secondAttribute="bottom" id="jvn-QK-tPP"/>  | 
            |
| 284 | 
                + <constraint firstAttribute="trailing" secondItem="FIE-jb-ZGu" secondAttribute="trailing" id="rKv-jZ-8C3"/>  | 
            |
| 285 | 
                + <constraint firstItem="JAf-2j-KJO" firstAttribute="leading" secondItem="0O4-xB-jPJ" secondAttribute="trailing" constant="14" id="zGg-au-jbn"/>  | 
            |
| 317 | 286 | 
                </constraints>  | 
            
| 318 | 287 | 
                </view>  | 
            
| 319 | 
                - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8wT-3F-YEB">  | 
            |
| 320 | 
                - <rect key="frame" x="62" y="47.5" width="321" height="0.5"/>  | 
            |
| 321 | 
                - <color key="backgroundColor" red="0.90588235289999997" green="0.90588235289999997" blue="0.90588235289999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 288 | 
                + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hN9-6g-QCB" userLabel="User Agreement View">  | 
            |
| 289 | 
                + <rect key="frame" x="0.0" y="96" width="383" height="48"/>  | 
            |
| 290 | 
                + <subviews>  | 
            |
| 291 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="about-userAgreement" translatesAutoresizingMaskIntoConstraints="NO" id="u6G-8X-fqc">  | 
            |
| 292 | 
                + <rect key="frame" x="16" y="8" width="32" height="32"/>  | 
            |
| 293 | 
                + </imageView>  | 
            |
| 294 | 
                + <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">  | 
            |
| 295 | 
                + <rect key="frame" x="62" y="14" width="66" height="20"/>  | 
            |
| 296 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>  | 
            |
| 297 | 
                + <fontDescription key="fontDescription" type="system" pointSize="16"/>  | 
            |
| 298 | 
                + <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 299 | 
                + <nil key="highlightedColor"/>  | 
            |
| 300 | 
                + </label>  | 
            |
| 301 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="列表箭头" translatesAutoresizingMaskIntoConstraints="NO" id="mhJ-Uj-tdj">  | 
            |
| 302 | 
                + <rect key="frame" x="349" y="6" width="24" height="36"/>  | 
            |
| 303 | 
                + </imageView>  | 
            |
| 304 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VGv-oO-leT">  | 
            |
| 305 | 
                + <rect key="frame" x="0.0" y="0.0" width="383" height="48"/>  | 
            |
| 306 | 
                + </button>  | 
            |
| 307 | 
                + </subviews>  | 
            |
| 308 | 
                + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  | 
            |
| 322 | 309 | 
                <constraints>  | 
            
| 323 | 
                - <constraint firstAttribute="height" constant="0.5" id="z9x-v3-pPw"/>  | 
            |
| 310 | 
                + <constraint firstAttribute="bottom" secondItem="VGv-oO-leT" secondAttribute="bottom" id="0aT-Bt-dMd"/>  | 
            |
| 311 | 
                + <constraint firstItem="u6G-8X-fqc" firstAttribute="leading" secondItem="hN9-6g-QCB" secondAttribute="leading" constant="16" id="624-Sr-wFs"/>  | 
            |
| 312 | 
                + <constraint firstAttribute="trailing" secondItem="mhJ-Uj-tdj" secondAttribute="trailing" constant="10" id="EuA-km-rpD"/>  | 
            |
| 313 | 
                + <constraint firstItem="VGv-oO-leT" firstAttribute="leading" secondItem="hN9-6g-QCB" secondAttribute="leading" id="OEU-mG-OlU"/>  | 
            |
| 314 | 
                + <constraint firstAttribute="height" constant="48" id="OcV-Pt-Pdy"/>  | 
            |
| 315 | 
                + <constraint firstAttribute="trailing" secondItem="VGv-oO-leT" secondAttribute="trailing" id="RGF-b4-y2h"/>  | 
            |
| 316 | 
                + <constraint firstItem="COm-64-2lk" firstAttribute="centerY" secondItem="hN9-6g-QCB" secondAttribute="centerY" id="Uku-vk-bBm"/>  | 
            |
| 317 | 
                + <constraint firstItem="COm-64-2lk" firstAttribute="leading" secondItem="u6G-8X-fqc" secondAttribute="trailing" constant="14" id="k2Q-Gl-cvs"/>  | 
            |
| 318 | 
                + <constraint firstItem="u6G-8X-fqc" firstAttribute="centerY" secondItem="hN9-6g-QCB" secondAttribute="centerY" id="mCV-Uh-zpC"/>  | 
            |
| 319 | 
                + <constraint firstItem="VGv-oO-leT" firstAttribute="top" secondItem="hN9-6g-QCB" secondAttribute="top" id="quD-eC-apC"/>  | 
            |
| 320 | 
                + <constraint firstItem="mhJ-Uj-tdj" firstAttribute="centerY" secondItem="hN9-6g-QCB" secondAttribute="centerY" id="z8z-9u-ZAm"/>  | 
            |
| 324 | 321 | 
                </constraints>  | 
            
| 325 | 322 | 
                </view>  | 
            
| 326 | 323 | 
                </subviews>  | 
            
| 327 | 324 | 
                <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 328 | 325 | 
                <constraints>  | 
            
| 329 | 
                - <constraint firstItem="8wT-3F-YEB" firstAttribute="bottom" secondItem="bc2-xm-kqy" secondAttribute="bottom" id="65g-jn-hcT"/>  | 
            |
| 330 | 
                - <constraint firstAttribute="trailing" secondItem="8wT-3F-YEB" secondAttribute="trailing" id="6JQ-JS-Ip1"/>  | 
            |
| 331 | 
                - <constraint firstItem="Nm2-xx-B3w" firstAttribute="leading" secondItem="kL5-iA-2wt" secondAttribute="leading" constant="16" id="84L-jD-Pw8"/>  | 
            |
| 332 | 
                - <constraint firstItem="u4d-zF-dTA" firstAttribute="trailing" secondItem="kL5-iA-2wt" secondAttribute="trailing" constant="-10" id="COq-GW-r7X"/>  | 
            |
| 333 | 
                - <constraint firstItem="CK4-vq-4yz" firstAttribute="centerY" secondItem="ibz-oi-jAe" secondAttribute="centerY" id="CjC-5P-Asn"/>  | 
            |
| 334 | 
                - <constraint firstItem="CYk-cu-pHl" firstAttribute="centerY" secondItem="pVB-Uy-xXH" secondAttribute="centerY" id="Dls-Sb-Shh"/>  | 
            |
| 335 | 
                - <constraint firstAttribute="trailing" secondItem="UVV-rB-BFU" secondAttribute="trailing" id="GMD-4v-LKH"/>  | 
            |
| 336 | 
                - <constraint firstItem="kL5-iA-2wt" firstAttribute="top" secondItem="bc2-xm-kqy" secondAttribute="bottom" id="HFK-QN-Bvm"/>  | 
            |
| 337 | 
                - <constraint firstItem="kxq-PT-sYi" firstAttribute="centerY" secondItem="CK4-vq-4yz" secondAttribute="centerY" id="Heg-aa-ECd"/>  | 
            |
| 338 | 
                - <constraint firstItem="u4d-zF-dTA" firstAttribute="centerY" secondItem="kL5-iA-2wt" secondAttribute="centerY" id="Iak-6n-Gud"/>  | 
            |
| 339 | 
                - <constraint firstItem="kL5-iA-2wt" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="Jgh-wt-u9c"/>  | 
            |
| 340 | 
                - <constraint firstAttribute="trailing" secondItem="kL5-iA-2wt" secondAttribute="trailing" id="Jwz-vj-QMP"/>  | 
            |
| 341 | 
                - <constraint firstItem="bc2-xm-kqy" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="NOF-oM-tG3"/>  | 
            |
| 342 | 
                - <constraint firstAttribute="trailing" secondItem="ibz-oi-jAe" secondAttribute="trailing" id="Nuv-y4-nkd"/>  | 
            |
| 343 | 
                - <constraint firstItem="UVV-rB-BFU" firstAttribute="bottom" secondItem="kL5-iA-2wt" secondAttribute="bottom" id="OtG-7N-4wa"/>  | 
            |
| 344 | 
                - <constraint firstItem="UVV-rB-BFU" firstAttribute="leading" secondItem="Sh6-Re-Ry3" secondAttribute="leading" id="Pdb-aN-6A1"/>  | 
            |
| 345 | 
                - <constraint firstItem="bc2-xm-kqy" firstAttribute="top" secondItem="bjC-jQ-LOw" secondAttribute="top" id="VaL-tC-Yca"/>  | 
            |
| 346 | 
                - <constraint firstItem="pVB-Uy-xXH" firstAttribute="leading" secondItem="bc2-xm-kqy" secondAttribute="leading" constant="16" id="ZJr-HC-Ewa"/>  | 
            |
| 347 | 
                - <constraint firstItem="pVB-Uy-xXH" firstAttribute="centerY" secondItem="bc2-xm-kqy" secondAttribute="centerY" id="bb6-Xu-bu5"/>  | 
            |
| 348 | 
                - <constraint firstItem="YSe-Bt-0NL" firstAttribute="trailing" secondItem="ibz-oi-jAe" secondAttribute="trailing" constant="-10" id="blI-SI-Sre"/>  | 
            |
| 349 | 
                - <constraint firstItem="ibz-oi-jAe" firstAttribute="top" secondItem="kL5-iA-2wt" secondAttribute="bottom" id="gpD-T1-aQn"/>  | 
            |
| 350 | 
                - <constraint firstItem="MgR-ta-3jg" firstAttribute="centerY" secondItem="bc2-xm-kqy" secondAttribute="centerY" id="hhY-tM-Yro"/>  | 
            |
| 351 | 
                - <constraint firstItem="ibz-oi-jAe" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="hko-xh-GEk"/>  | 
            |
| 352 | 
                - <constraint firstAttribute="trailing" secondItem="bc2-xm-kqy" secondAttribute="trailing" id="j9a-UG-jWX"/>  | 
            |
| 353 | 
                - <constraint firstItem="Sh6-Re-Ry3" firstAttribute="leading" secondItem="Nm2-xx-B3w" secondAttribute="trailing" constant="14" id="jaA-Ms-RwN"/>  | 
            |
| 354 | 
                - <constraint firstItem="8wT-3F-YEB" firstAttribute="leading" secondItem="CYk-cu-pHl" secondAttribute="leading" id="neI-9C-tLD"/>  | 
            |
| 355 | 
                - <constraint firstItem="CK4-vq-4yz" firstAttribute="leading" secondItem="ibz-oi-jAe" secondAttribute="leading" constant="16" id="owu-tC-JjZ"/>  | 
            |
| 356 | 
                - <constraint firstItem="CYk-cu-pHl" firstAttribute="leading" secondItem="pVB-Uy-xXH" secondAttribute="trailing" constant="14" id="rAe-Y2-twj"/>  | 
            |
| 357 | 
                - <constraint firstItem="YSe-Bt-0NL" firstAttribute="centerY" secondItem="ibz-oi-jAe" secondAttribute="centerY" id="rIX-lQ-ZRW"/>  | 
            |
| 358 | 
                - <constraint firstItem="MgR-ta-3jg" firstAttribute="trailing" secondItem="bc2-xm-kqy" secondAttribute="trailing" constant="-10" id="rej-aa-eUr"/>  | 
            |
| 359 | 
                - <constraint firstItem="Sh6-Re-Ry3" firstAttribute="centerY" secondItem="Nm2-xx-B3w" secondAttribute="centerY" id="ubQ-U7-gLQ"/>  | 
            |
| 360 | 
                - <constraint firstItem="Nm2-xx-B3w" firstAttribute="centerY" secondItem="kL5-iA-2wt" secondAttribute="centerY" id="vGp-DO-BSU"/>  | 
            |
| 361 | 
                - <constraint firstItem="kxq-PT-sYi" firstAttribute="leading" secondItem="CK4-vq-4yz" secondAttribute="trailing" constant="14" id="x9l-O0-sX8"/>  | 
            |
| 326 | 
                + <constraint firstItem="mae-VW-ed0" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="25m-1u-PlX"/>  | 
            |
| 327 | 
                + <constraint firstAttribute="trailing" secondItem="EVY-h5-0pO" secondAttribute="trailing" id="Cl6-If-4fD"/>  | 
            |
| 328 | 
                + <constraint firstItem="EVY-h5-0pO" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="Cmx-5f-fSM"/>  | 
            |
| 329 | 
                + <constraint firstItem="EVY-h5-0pO" firstAttribute="top" secondItem="mae-VW-ed0" secondAttribute="bottom" id="Kg3-vC-Ohr"/>  | 
            |
| 330 | 
                + <constraint firstAttribute="trailing" secondItem="mae-VW-ed0" secondAttribute="trailing" id="Qtq-6O-uU3"/>  | 
            |
| 331 | 
                + <constraint firstItem="hN9-6g-QCB" firstAttribute="top" secondItem="EVY-h5-0pO" secondAttribute="bottom" id="SCp-cp-eDW"/>  | 
            |
| 332 | 
                + <constraint firstItem="hN9-6g-QCB" firstAttribute="leading" secondItem="bjC-jQ-LOw" secondAttribute="leading" id="Ufj-Mi-XEY"/>  | 
            |
| 333 | 
                + <constraint firstAttribute="trailing" secondItem="hN9-6g-QCB" secondAttribute="trailing" id="YLN-9T-LED"/>  | 
            |
| 334 | 
                + <constraint firstItem="mae-VW-ed0" firstAttribute="top" secondItem="bjC-jQ-LOw" secondAttribute="top" id="qXw-XK-Fq0"/>  | 
            |
| 362 | 335 | 
                </constraints>  | 
            
| 363 | 336 | 
                </view>  | 
            
| 337 | 
                + <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">  | 
            |
| 338 | 
                + <rect key="frame" x="146.5" y="649" width="82" height="12"/>  | 
            |
| 339 | 
                + <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 340 | 
                + <fontDescription key="fontDescription" type="system" pointSize="10"/>  | 
            |
| 341 | 
                + <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 342 | 
                + <nil key="highlightedColor"/>  | 
            |
| 343 | 
                + </label>  | 
            |
| 344 | 
                + <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">  | 
            |
| 345 | 
                + <rect key="frame" x="161" y="628.5" width="53" height="14.5"/>  | 
            |
| 346 | 
                + <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 347 | 
                + <fontDescription key="fontDescription" type="system" pointSize="12"/>  | 
            |
| 348 | 
                + <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 349 | 
                + <nil key="highlightedColor"/>  | 
            |
| 350 | 
                + </label>  | 
            |
| 364 | 351 | 
                </subviews>  | 
            
| 365 | 352 | 
                <color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 366 | 353 | 
                <constraints>  | 
            
| 367 | 354 | 
                <constraint firstItem="bjC-jQ-LOw" firstAttribute="leading" secondItem="gzV-sh-iNN" secondAttribute="leadingMargin" constant="-20" id="4XL-Mn-Bda"/>  | 
            
| 368 | 355 | 
                <constraint firstAttribute="bottom" secondItem="bjC-jQ-LOw" secondAttribute="bottom" id="7cS-3o-xis"/>  | 
            
| 369 | 356 | 
                <constraint firstItem="bjC-jQ-LOw" firstAttribute="centerX" secondItem="szY-tb-XAT" secondAttribute="centerX" id="B1z-7x-Vdk"/>  | 
            
| 357 | 
                + <constraint firstItem="inH-WZ-fdD" firstAttribute="centerX" secondItem="gzV-sh-iNN" secondAttribute="centerX" id="BGs-5i-uoA"/>  | 
            |
| 358 | 
                + <constraint firstItem="bEV-QT-Egq" firstAttribute="centerX" secondItem="gzV-sh-iNN" secondAttribute="centerX" id="CGs-tu-a6G"/>  | 
            |
| 359 | 
                + <constraint firstItem="szY-tb-XAT" firstAttribute="bottom" secondItem="inH-WZ-fdD" secondAttribute="bottom" constant="6" id="XIG-RN-kfd"/>  | 
            |
| 370 | 360 | 
                <constraint firstItem="bjC-jQ-LOw" firstAttribute="top" secondItem="Str-BX-Lky" secondAttribute="bottom" id="dKZ-iN-vPM"/>  | 
            
| 371 | 361 | 
                <constraint firstItem="szY-tb-XAT" firstAttribute="trailing" secondItem="Str-BX-Lky" secondAttribute="trailing" id="fpg-jU-lLU"/>  | 
            
| 362 | 
                + <constraint firstItem="inH-WZ-fdD" firstAttribute="top" secondItem="bEV-QT-Egq" secondAttribute="bottom" constant="6" id="gQZ-xs-1i5"/>  | 
            |
| 372 | 363 | 
                <constraint firstItem="Str-BX-Lky" firstAttribute="top" secondItem="szY-tb-XAT" secondAttribute="top" id="n5h-V7-STS"/>  | 
            
| 373 | 364 | 
                <constraint firstAttribute="trailingMargin" secondItem="bjC-jQ-LOw" secondAttribute="trailing" constant="-20" id="wJd-7K-65L"/>  | 
            
| 374 | 365 | 
                <constraint firstItem="Str-BX-Lky" firstAttribute="leading" secondItem="szY-tb-XAT" secondAttribute="leading" id="x2e-5M-bfE"/>  | 
            
                @@ -377,14 +368,15 @@  | 
            ||
| 377 | 368 | 
                </view>  | 
            
| 378 | 369 | 
                <navigationItem key="navigationItem" id="plF-EP-Z5g"/>  | 
            
| 379 | 370 | 
                <connections>  | 
            
| 380 | 
                - <outlet property="scoreBtn" destination="kL5-iA-2wt" id="zao-TW-Rnn"/>  | 
            |
| 381 | 
                - <outlet property="scoreLabel" destination="Sh6-Re-Ry3" id="hBp-gS-PEs"/>  | 
            |
| 371 | 
                + <outlet property="contactUsBtn" destination="L1g-sb-a5F" id="t0g-Wx-dry"/>  | 
            |
| 372 | 
                + <outlet property="scoreBtn" destination="FIE-jb-ZGu" id="nmA-Dz-Bwe"/>  | 
            |
| 373 | 
                + <outlet property="userAgreementBtn" destination="VGv-oO-leT" id="Dzs-He-hds"/>  | 
            |
| 382 | 374 | 
                <outlet property="versionLabel" destination="bEV-QT-Egq" id="uQ9-IF-ImJ"/>  | 
            
| 383 | 375 | 
                </connections>  | 
            
| 384 | 376 | 
                </viewController>  | 
            
| 385 | 377 | 
                <placeholder placeholderIdentifier="IBFirstResponder" id="i5Y-H4-CYK" userLabel="First Responder" sceneMemberID="firstResponder"/>  | 
            
| 386 | 378 | 
                </objects>  | 
            
| 387 | 
                - <point key="canvasLocation" x="144" y="926.53673163418296"/>  | 
            |
| 379 | 
                + <point key="canvasLocation" x="143.19999999999999" y="926.08695652173924"/>  | 
            |
| 388 | 380 | 
                </scene>  | 
            
| 389 | 381 | 
                <!--Mine Order View Controller-->  | 
            
| 390 | 382 | 
                <scene sceneID="3e4-t5-KsN">  | 
            
                @@ -632,10 +624,10 @@  | 
            ||
| 632 | 624 | 
                </scenes>  | 
            
| 633 | 625 | 
                <resources>  | 
            
| 634 | 626 | 
                <image name="Logo" width="140" height="140"/>  | 
            
| 627 | 
                + <image name="about-contactUs" width="32" height="32"/>  | 
            |
| 628 | 
                + <image name="about-score" width="32" height="32"/>  | 
            |
| 629 | 
                + <image name="about-userAgreement" width="32" height="32"/>  | 
            |
| 635 | 630 | 
                <image name="navigation-background" width="12" height="132"/>  | 
            
| 636 | 
                - <image name="关于-用户协议 " width="32" height="32"/>  | 
            |
| 637 | 
                - <image name="关于-联系我们" width="32" height="32"/>  | 
            |
| 638 | 
                - <image name="关于-评分" width="32" height="32"/>  | 
            |
| 639 | 631 | 
                <image name="列表箭头" width="24" height="36"/>  | 
            
| 640 | 632 | 
                <image name="注销切图" width="32" height="32"/>  | 
            
| 641 | 633 | 
                <image name="默认头像" width="240" height="240"/>  | 
            
                @@ -9,51 +9,66 @@  | 
            ||
| 9 | 9 | 
                import UIKit  | 
            
| 10 | 10 | 
                import PaiaiDataKit  | 
            
| 11 | 11 | 
                import PaiaiUIKit  | 
            
| 12 | 
                +import RxSwift  | 
            |
| 12 | 13 | 
                 | 
            
| 13 | 
                -struct AboutWebModel {
               | 
            |
| 14 | 
                -  | 
            |
| 15 | 
                -}  | 
            |
| 16 | 14 | 
                 | 
            
| 17 | 15 | 
                 final class MineAboutViewController: UIViewController {
               | 
            
| 18 | 16 | 
                 | 
            
| 19 | 
                - // MARK: Storyboard property  | 
            |
| 20 | 
                - @IBOutlet var versionLabel: UILabel!  | 
            |
| 17 | 
                + @IBOutlet weak var contactUsBtn: UIButton!  | 
            |
| 21 | 18 | 
                @IBOutlet weak var scoreBtn: UIButton!  | 
            
| 22 | 
                - @IBOutlet weak var scoreLabel: UILabel!  | 
            |
| 23 | 
                -  | 
            |
| 19 | 
                + @IBOutlet weak var userAgreementBtn: UIButton!  | 
            |
| 20 | 
                + @IBOutlet var versionLabel: UILabel!  | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                + private var disposeBag = DisposeBag()  | 
            |
| 23 | 
                +  | 
            |
| 24 | 24 | 
                // MARK: view function  | 
            
| 25 | 25 | 
                     override func viewDidLoad() {
               | 
            
| 26 | 26 | 
                super.viewDidLoad()  | 
            
| 27 | 
                -  | 
            |
| 27 | 
                +  | 
            |
| 28 | 28 | 
                // scoreLabel.text = UserDefaults.Account.bool(forKey: .isAudit) ? "敬请期待" : "给我评分"  | 
            
| 29 | 29 | 
                // scoreBtn.isEnabled = !(UserDefaults.Account.bool(forKey: .isAudit))  | 
            
| 30 | 
                + title = "关于"  | 
            |
| 30 | 31 | 
                versionLabel.text = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String  | 
            
| 32 | 
                + bindGestures()  | 
            |
| 31 | 33 | 
                }  | 
            
| 34 | 
                +}  | 
            |
| 32 | 35 | 
                 | 
            
| 33 | 
                -    override func viewWillAppear(_ animated: Bool) {
               | 
            |
| 34 | 
                - super.viewWillAppear(true)  | 
            |
| 35 | 
                -// titleWithbackBar = "关于"  | 
            |
| 36 | 
                +fileprivate extension MineAboutViewController {
               | 
            |
| 37 | 
                +    func bindGestures() {
               | 
            |
| 38 | 
                + bindGestureToContactUsAction()  | 
            |
| 39 | 
                + bindGestureToScoreAction()  | 
            |
| 40 | 
                + bindGestureToUserAgreementAction()  | 
            |
| 36 | 41 | 
                }  | 
            
| 37 | 
                -  | 
            |
| 38 | 
                - // MARK: Storyboard button function  | 
            |
| 39 | 
                -    @IBAction func giveFen() {
               | 
            |
| 40 | 
                -        guard let url = URL(string: "https://itunes.apple.com/cn/app/pai-aipaiai/id1163960351?mt=8") else {
               | 
            |
| 41 | 
                - return  | 
            |
| 42 | 
                - }  | 
            |
| 43 | 
                - UIApplication.shared.openURL(url)  | 
            |
| 42 | 
                +  | 
            |
| 43 | 
                +    func bindGestureToContactUsAction() {
               | 
            |
| 44 | 
                + contactUsBtn.rx.tap  | 
            |
| 45 | 
                + .asObservable()  | 
            |
| 46 | 
                +            .subscribe { (_) in
               | 
            |
| 47 | 
                + let webVC = WebViewController(title: "联系我们",  | 
            |
| 48 | 
                + path: "https://pai.ai/page/contact_us")  | 
            |
| 49 | 
                + self.pushViewController(webVC)  | 
            |
| 50 | 
                + }.disposed(by: disposeBag)  | 
            |
| 44 | 51 | 
                }  | 
            
| 45 | 
                -    @IBAction func contactUs(_ sender: UIButton) {
               | 
            |
| 46 | 
                -// let about = UIStoryboard.mine.instantiateController(AboutWebViewController.self)  | 
            |
| 47 | 
                -// about.url = "http://xfoto.com.cn/page/contact_us"  | 
            |
| 48 | 
                -// about.title = "联系我们"  | 
            |
| 49 | 
                -// navigationController?.pushViewController(about, animated: true)  | 
            |
| 52 | 
                +  | 
            |
| 53 | 
                +    func bindGestureToScoreAction() {
               | 
            |
| 54 | 
                + scoreBtn.rx.tap  | 
            |
| 55 | 
                + .asObservable()  | 
            |
| 56 | 
                +            .subscribe { (_) in
               | 
            |
| 57 | 
                +                guard let url = URL(string: "https://itunes.apple.com/cn/app/pai-aipaiai/id1163960351?mt=8") else {
               | 
            |
| 58 | 
                + return  | 
            |
| 59 | 
                + }  | 
            |
| 60 | 
                + UIApplication.shared.open(url, options: [:], completionHandler: nil)  | 
            |
| 61 | 
                + }.disposed(by: disposeBag)  | 
            |
| 50 | 62 | 
                }  | 
            
| 51 | 
                -  | 
            |
| 52 | 
                -    @IBAction func userAgreement(_ sender: UIButton) {
               | 
            |
| 53 | 
                -// let about = UIStoryboard.mine.instantiateController(AboutWebViewController.self)  | 
            |
| 54 | 
                -// about.url = "http://xfoto.com.cn/page/user_agreement"  | 
            |
| 55 | 
                -// about.title = "用户协议"  | 
            |
| 56 | 
                -// navigationController?.pushViewController(about, animated: true)  | 
            |
| 63 | 
                +  | 
            |
| 64 | 
                +    func bindGestureToUserAgreementAction() {
               | 
            |
| 65 | 
                + userAgreementBtn.rx.tap  | 
            |
| 66 | 
                + .asObservable()  | 
            |
| 67 | 
                +            .subscribe { (_) in
               | 
            |
| 68 | 
                + let webVC = WebViewController(title: "用户协议",  | 
            |
| 69 | 
                + path: "https://pai.ai/page/user_agreement")  | 
            |
| 70 | 
                + self.pushViewController(webVC)  | 
            |
| 71 | 
                + }.disposed(by: disposeBag)  | 
            |
| 57 | 72 | 
                }  | 
            
| 58 | 73 | 
                }  | 
            
| 59 | 74 | 
                 | 
            
                @@ -13,12 +13,12 @@ import PaiaiUIKit  | 
            ||
| 13 | 13 | 
                 class MineCoordinator: Coordinator {
               | 
            
| 14 | 14 | 
                 | 
            
| 15 | 15 | 
                let mineViewController: MineViewController  | 
            
| 16 | 
                - let containerViewController: ContainerViewController  | 
            |
| 16 | 
                + let navigationController: UINavigationController  | 
            |
| 17 | 17 | 
                // let shareUserInfoViewModel  | 
            
| 18 | 18 | 
                 | 
            
| 19 | 
                -    init(_ mineViewController: MineViewController, containerViewController: ContainerViewController) {
               | 
            |
| 19 | 
                +    init(_ mineViewController: MineViewController, containerViewController: UINavigationController) {
               | 
            |
| 20 | 20 | 
                self.mineViewController = mineViewController  | 
            
| 21 | 
                - self.containerViewController = containerViewController  | 
            |
| 21 | 
                + self.navigationController = navigationController  | 
            |
| 22 | 22 | 
                self.mineViewController.delegate = self  | 
            
| 23 | 23 | 
                }  | 
            
| 24 | 24 | 
                 | 
            
                @@ -39,6 +39,7 @@ extension MineCoordinator: MineViewControllerDelegate {
               | 
            ||
| 39 | 39 | 
                         switch item {
               | 
            
| 40 | 40 | 
                case .group:  | 
            
| 41 | 41 | 
                let vc = makeMineGroupViewController()  | 
            
| 42 | 
                + navigationController  | 
            |
| 42 | 43 | 
                containerViewController.pushViewController(vc)  | 
            
| 43 | 44 | 
                case .order:  | 
            
| 44 | 45 | 
                let vc = makeMineOrderViewController()  | 
            
                @@ -77,6 +78,7 @@ fileprivate extension MineCoordinator {
               | 
            ||
| 77 | 78 | 
                 | 
            
| 78 | 79 | 
                     func makeMineFeedbackViewController() -> MineFeedbackViewController {
               | 
            
| 79 | 80 | 
                let vc = UIStoryboard.mine.instantiateController(MineFeedbackViewController.self)  | 
            
| 81 | 
                + vc.feedbackAPI = FeedbackRemoteAPI()  | 
            |
| 80 | 82 | 
                return vc  | 
            
| 81 | 83 | 
                }  | 
            
| 82 | 84 | 
                 | 
            
                @@ -19,20 +19,24 @@ final class MineFeedbackViewController: UIViewController {
               | 
            ||
| 19 | 19 | 
                @IBOutlet var sendBtn: UIButton!  | 
            
| 20 | 20 | 
                fileprivate let disposeBag = DisposeBag()  | 
            
| 21 | 21 | 
                 | 
            
| 22 | 
                -// var viewModel: MineFeedbackViewModel!  | 
            |
| 22 | 
                + var feedbackAPI: FeedbackRemoteAPI!  | 
            |
| 23 | 
                +  | 
            |
| 23 | 24 | 
                // MARK: view function  | 
            
| 24 | 25 | 
                     override func viewDidLoad() {
               | 
            
| 25 | 26 | 
                super.viewDidLoad()  | 
            
| 27 | 
                + title = "意见反馈"  | 
            |
| 26 | 28 | 
                textView.placeholder = "您的建议是我们前进的动力"  | 
            
| 27 | 
                - configurationRx()  | 
            |
| 28 | 
                - }  | 
            |
| 29 | 
                -  | 
            |
| 30 | 
                -    func configurationRx() {
               | 
            |
| 31 | 
                -  | 
            |
| 29 | 
                + bindTextViewToSendBtn()  | 
            |
| 32 | 30 | 
                }  | 
            
| 33 | 31 | 
                 | 
            
| 34 | 32 | 
                     @IBAction func sendFeedBack() {
               | 
            
| 35 | 
                -// viewModel.submit(content)  | 
            |
| 33 | 
                +        feedbackAPI.submit(text: textView.text).subscribe(onCompleted: {[weak self] in
               | 
            |
| 34 | 
                +            guard let `self` = self else { return }
               | 
            |
| 35 | 
                + self.popController()  | 
            |
| 36 | 
                + Toast.show(message: "感谢您的建议")  | 
            |
| 37 | 
                +        }) { (error) in
               | 
            |
| 38 | 
                +  | 
            |
| 39 | 
                + }.disposed(by: disposeBag)  | 
            |
| 36 | 40 | 
                }  | 
            
| 37 | 41 | 
                 | 
            
| 38 | 42 | 
                     @IBAction func tap() {
               |