@@ -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() { |