|
//
// ContainerViewController.swift
// Paiai_iOS
//
// Created by FFIB on 2018/12/6.
// Copyright © 2018 FFIB. All rights reserved.
//
import UIKit
import RxSwift
import PaiaiDataKit
import PaiaiUIKit
protocol ContainerViewControllerDelegate: class {
func presentMine()
func presentLogin()
}
public final class ContainerViewController: PageViewController {
weak var delegate: ContainerViewControllerDelegate?
var userInfo: UserInfoViewModel!
private var disposeBag = DisposeBag()
private var iconView: UIImageView = {
let iconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 32))
iconView.contentMode = .scaleAspectFill
iconView.isUserInteractionEnabled = true
iconView.image = UIImage.Navigation.verticalPoints
return iconView
}()
private var headerView: UIImageView = {
let headerView = UIImageView(frame: CGRect(x: 20, y: 0, width: 32, height: 32))
headerView.isUserInteractionEnabled = true
headerView.image = UIImage.defaultAvatar
return headerView
}()
private var navigationContentView: UIView = {
let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 32))
return contentView
}()
/// life circle
override public func viewDidLoad() {
super.viewDidLoad()
setupNavigationBar()
bindInteraction()
}
public override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
bindLoggedInInteraction()
bindUserInfoToHeaderView()
}
func setupNavigationBar() {
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.tintColor = UIColor.white
navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
navigationController?.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
constructNavigationViewHierarchy()
}
func constructNavigationViewHierarchy() {
navigationContentView.addSubview(iconView)
navigationContentView.addSubview(headerView)
navigationItem.setLeftItem(UIBarButtonItem(customView: navigationContentView))
}
}
/// binding UI
fileprivate extension ContainerViewController {
func bindLoggedInInteraction() {
userInfo.notLoggedIn
.asDriver(onErrorJustReturn: ())
.drive(onNext: { [unowned self] (_) in
self.delegate?.presentLogin()
}).disposed(by: disposeBag)
}
func bindInteraction() {
let tap = UITapGestureRecognizer()
tap.rx.event.subscribe(onNext: { (_) in
self.delegate?.presentMine()
}).disposed(by: disposeBag)
navigationContentView.addGestureRecognizer(tap)
}
func bindUserInfoToHeaderView() {
userInfo.shareUserInfo.asObservable()
.subscribe(onNext: {[unowned self] (info) in
self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
}).disposed(by: disposeBag)
}
}
|