Nav apraksta

ContainerViewController.swift 3.1KB

    // // 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) } }