Нет описания

ContainerViewController.swift 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // ContainerViewController.swift
  3. // PaiAi
  4. //
  5. // Created by ffib on 2018/12/6.
  6. // Copyright © 2018 yb. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import PaiaiDataKit
  11. import PaiaiUIKit
  12. protocol ContainerViewControllerDelegate: class {
  13. func presentMine()
  14. func presentLogin()
  15. }
  16. public final class ContainerViewController: PageViewController {
  17. weak var delegate: ContainerViewControllerDelegate?
  18. var userInfo: UserInfoViewModel!
  19. private var disposeBag = DisposeBag()
  20. private var iconView: UIImageView = {
  21. let iconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 32))
  22. iconView.contentMode = .scaleAspectFill
  23. iconView.isUserInteractionEnabled = true
  24. iconView.image = UIImage.Navigation.verticalPoints
  25. return iconView
  26. }()
  27. private var headerView: UIImageView = {
  28. let headerView = UIImageView(frame: CGRect(x: 20, y: 0, width: 32, height: 32))
  29. headerView.isUserInteractionEnabled = true
  30. headerView.image = UIImage.defaultAvatar
  31. return headerView
  32. }()
  33. private var navigationContentView: UIView = {
  34. let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 32))
  35. return contentView
  36. }()
  37. /// life circle
  38. override public func viewDidLoad() {
  39. super.viewDidLoad()
  40. makeNavigationBar()
  41. bindInteraction()
  42. }
  43. public override func viewDidAppear(_ animated: Bool) {
  44. super.viewDidAppear(animated)
  45. bindLoggedInInteraction()
  46. }
  47. func makeNavigationBar() {
  48. constructNavigationViewHierarchy()
  49. }
  50. func constructNavigationViewHierarchy() {
  51. navigationContentView.addSubview(iconView)
  52. navigationContentView.addSubview(headerView)
  53. navigationItem.leftBarButtonItem = UIBarButtonItem(customView: navigationContentView)
  54. }
  55. }
  56. /// binding UI
  57. fileprivate extension ContainerViewController {
  58. func bindLoggedInInteraction() {
  59. userInfo.notLoggedIn
  60. .asDriver(onErrorJustReturn: ())
  61. .drive(onNext: { [unowned self] (_) in
  62. self.delegate?.presentLogin()
  63. }).disposed(by: disposeBag)
  64. }
  65. func bindInteraction() {
  66. let tap = UITapGestureRecognizer()
  67. tap.rx.event.subscribe(onNext: { (_) in
  68. self.delegate?.presentMine()
  69. }).disposed(by: disposeBag)
  70. navigationContentView.addGestureRecognizer(tap)
  71. }
  72. func bindUserInfoToHeaderView() {
  73. userInfo.shareUserInfo.asObservable()
  74. .subscribe(onNext: {[unowned self] (info) in
  75. self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
  76. }).disposed(by: disposeBag)
  77. }
  78. }