No Description

PhotoDetailViewController.swift 17KB

    // // PhotoDetailViewController.swift // PaiAi // // Created by zhengjianfei on 16/4/6. // Copyright © 2016年 FFIB. All rights reserved. // import UIKit import RxSwift import RxCocoa import PaiaiDataKit import PaiaiUIKit let kPhotographerMark = 1 final class PhotoDetailViewController: UIViewController { @IBOutlet weak var groupAvatar: UIImageView! @IBOutlet weak var groupName: UILabel! @IBOutlet weak var photoCollectionView: UICollectionView! @IBOutlet weak var userAvatar: UIImageView! @IBOutlet weak var userName: UILabel! @IBOutlet weak var photoTime: UILabel! @IBOutlet weak var thumbupCount: UILabel! @IBOutlet weak var thumbupView: UIView! @IBOutlet weak var commentCount: UILabel! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var commentView: UIView! @IBOutlet weak var commentHeight: NSLayoutConstraint! @IBOutlet weak var commentTextField: UITextField! @IBOutlet weak var sendBtn: UIButton! @IBOutlet weak var buyView: UIView! @IBOutlet weak var waterMarkImage: UIImageView! @IBOutlet weak var waterMarkLabel: UILabel! // MARK: data property var viewModel: PhotoDetailViewModel! lazy var datas = [PhotoItem]() lazy var currentPhotoIndex = 0 var isHiddenEnterView = false let disposeBag = DisposeBag() static let storyboardCtl = UIStoryboard.photoDetail.instantiateInitialViewController() as! PhotoDetailViewController // MARK: view function override func viewDidLoad() { super.viewDidLoad() // detailPageViewModel.tipDelegate = self // tableView.tableFooterView = UIView() configureNotification() commentTextField.rx.text .map {!($0?.isEmpty)!} .bind(to: sendBtn.rx.isEnabled) .disposed(by: disposeBag) } func setupCommentTextField() { commentTextField.addLeftPadding(7) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) // titleWithbackBar = "详情" navigationController?.isNavigationBarHidden = false // refreshUI(index: currentPhotoIndex) } // override func backToController() { // navigationController?.popViewController(animated: true) // if let last = navigationController?.viewControllers[(navigationController?.viewControllers.count)! - 1] as? HomeViewController { //// last.mainViewModel.models.value = datas // } // // if let last = navigationController?.viewControllers[(navigationController?.viewControllers.count)! - 1] as? GroupViewController { //// last.MineGroupViewModel.models.value = datas // } // } func configureNotification() { do { // NotificationCenter.default.rx.notification(Notification.Name(rawValue: WXPayDidFinishNotification)).asObservable().subscribe { (notification) in // FFToastView.showLoadingToast(inView: UIApplication.shared.keyWindow!, blockSuperView: true) // self.detailPageViewModel.handleResult(errorCode: 0, success: {[weak self](PhotoItem) in // if let weakself = self { // weakself.datas[weakself.currentPhotoIndex].murl = PhotoItem.murl // weakself.datas[weakself.currentPhotoIndex].rurl = PhotoItem.rurl //// weakself.showBuyView() // weakself.tableView.reloadRows(at: [IndexPath(item: 0, section: 1)], with: .none) // let fullPicCtl = UIStoryboard.detailBoard.instantiateController(ShowFullPicController.self) // fullPicCtl.datas = weakself.datas // fullPicCtl.currentPhotoIndex = weakself.currentPhotoIndex // fullPicCtl.showNomark = weakself.detailPageViewModel.watermarkPrice != -1 // fullPicCtl.showHD = weakself.detailPageViewModel.hdPrice != -1 // weakself.navigationController?.pushViewController(fullPicCtl, animated: true) // } // }) // }.disposed(by: disposeBag) } do { // NotificationCenter.default.rx.notification(Notification.Name.UIKeyboardWillShow) // .asObservable() // .subscribe({ (notification) in // guard let info = notification.element?.userInfo, let avalue = info[UIKeyboardFrameEndUserInfoKey] else { // return // } // // let height = (avalue as AnyObject).cgRectValue.size.height // self.returnKeyboarAction(notification.element!, height: height) // }).disposed(by: disposeBag) } do { NotificationCenter.default.rx.notification(UIResponder.keyboardWillHideNotification) .asObservable() .subscribe({ (notification) in self.returnKeyboarAction(notification.element!, height: 0) }).disposed(by: disposeBag) } } // MARK: refresh interface func refreshUI(index: Int) { currentPhotoIndex = index // detailPageViewModel.currentPhoto = datas[index] // detailPageViewModel.fetchThumbup(success: {[weak self] in // if let weakself = self { // var model = weakself.datas[index] // model.thumbup_num = weakself.detailPageViewModel.thumbups.count // weakself.datas[index] = model //// PhotoLocalStorage.instance.updateLocalData(PhotoItem: model) // weakself.reloadSection(inter: 3) // } // }) // detailPageViewModel.fetchComment(success: {[weak self] in // if let weakself = self { // // var model = weakself.datas[index] // model.comment_num = weakself.detailPageViewModel.comments.count // weakself.datas[index] = model //// PhotoLocalStorage.instance.updateLocalData(PhotoItem: model) // weakself.reloadSection(inter: 4) // } // }) // reloadSection(inter: 0) // reloadSection(inter: 2) showBuyView() } func showBuyView() { // if detailPageViewModel.currentPhoto.photo_from == kPhotographerMark && detailPageViewModel.currentPhoto.display_payment_btn == 1 { // buyView.isHidden = false // detailPageViewModel.hdPrice = -0.01 // detailPageViewModel.watermarkPrice = -0.01 // shuiyinLabel.text = !detailPageViewModel.currentPhoto.murl.isEmpty ? "查看无水印图" : "去除水印" // shuiyinImage.isHidden = false // } else { // buyView.isHidden = true // } } // MARK: Storyboard button function @IBAction func HDPay(_ sender: UIButton) { // detailPageViewModel.getHD (getPriceSuccess: { [weak self] (isExist) in // if let weakself = self { // if isExist { // let fullPicCtl = UIStoryboard(name: "Detail", bundle: nil).instantiateController(ShowFullPicController.self) // fullPicCtl.datas = [weakself.datas[weakself.currentPhotoIndex]] // fullPicCtl.showNomark = true // fullPicCtl.currentPhotoIndex = weakself.currentPhotoIndex // weakself.navigationController?.pushViewController(fullPicCtl, animated: true) // } else { // } // } // }) } @IBAction func waterMarkPay(_ sender: UIButton) { // detailPageViewModel.getWatermark (getPriceSuccess: { [weak self] (isExist) in // if let weakself = self { // if isExist { // let fullPicCtl = UIStoryboard(name: "Detail", bundle: nil).instantiateController(ShowFullPicController.self) // fullPicCtl.datas = weakself.datas // fullPicCtl.showNomark = true // fullPicCtl.currentPhotoIndex = weakself.currentPhotoIndex // weakself.navigationController?.pushViewController(fullPicCtl, animated: true) // } else { // weakself.shuiyinImage.isHidden = true // weakself.shuiyinLabel.text = "¥\((weakself.detailPageViewModel.watermarkPrice/100))" // } // } // }) } @IBAction func share() { let ctl = UIStoryboard.photoDetail.instantiateController(ShareController.self) ctl.shareContent = "我使用拍爱分享了一张美图,你也快来试试吧" ctl.shareImgUrlThumb = datas[currentPhotoIndex].photo_thumbnail_url ctl.shareUrl = datas[currentPhotoIndex].photo_share_url presentController(ctl) } @IBAction func comment() { commentView.isHidden = false commentTextField.becomeFirstResponder() } @IBAction func sendComment() { guard let text = commentTextField.text else { return } // detailPageViewModel.sendComment(content: text, success: { [weak self] in // if let weakself = self { // weakself.commentTextField.text = "" // weakself.commentTextField.resignFirstResponder() // weakself.commentView.isHidden = true // weakself.refreshUI(index: weakself.currentPhotoIndex) // } // }) } @IBAction func thumbup() { // detailPageViewModel.sendThumbup(success: {[weak self] in // if let weakself = self { // weakself.refreshUI(index: weakself.currentPhotoIndex) // } // // }) } // MARK: custom function func reloadSection(inter: Int) { tableView.beginUpdates() let indexSet = IndexSet(integer: inter) tableView.reloadSections(indexSet, with: .none) tableView.endUpdates() } @objc func showThumps() { // if detailPageViewModel.thumbupsCount > 0 { // detailPageViewModel.thumbupsCount = 0 // } else { // detailPageViewModel.thumbupsCount = detailPageViewModel.thumbups.count // } reloadSection(inter: 3) } @objc func showComments() { // if detailPageViewModel.commentsCount > 0 { // detailPageViewModel.commentsCount = 0 // } else { // detailPageViewModel.commentsCount = detailPageViewModel.comments.count // } reloadSection(inter: 4) } @objc func loadReportController() { // let ctl = UIStoryboard.photoDetail.instantiateController(ReportController.self) // presentController(ctl) } func returnKeyboarAction(_ notification: Notification, height: CGFloat) { guard let info = (notification as NSNotification).userInfo, let duration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else { return } UIView.animate(withDuration: duration, animations: {() -> Void in self.commentHeight.constant = height self.commentView.superview!.layoutIfNeeded() }) } // MARK: deinit deinit { NotificationCenter.default.removeObserver(self) } } // MARK: custom delegate function extension PhotoDetailViewController: CellDelegate { func selectIndex(indexpath: IndexPath) { let ctl = UIStoryboard.photoDetail.instantiateController(ShowFullPicController.self) ctl.datas = datas ctl.currentPhotoIndex = currentPhotoIndex show(ctl, sender: nil) } func returnCurrentIndex(index: Int) { refreshUI(index: index) } func pushNext() { let ctl = UIStoryboard.main.instantiateController(GroupViewController.self) // ctl.groupModel = GroupModel(map: Map(mappingType: .fromJSON, JSON: datas[currentPhotoIndex].toJSON())) show(ctl, sender: nil) } } //MARK textField delegate extension PhotoDetailViewController: UIGestureRecognizerDelegate { // MARK: textField func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { return commentTextField.isFirstResponder } @IBAction func ReturnKeyboard(_ sender: UITapGestureRecognizer) { if !commentView.isHidden { commentTextField.resignFirstResponder() commentView.isHidden = true } } } // MARK: UITableView delegate extension PhotoDetailViewController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if section == 3 { let cell = tableView.dequeueReusableCell(withIdentifier: "thumbupHeadCell") if let label = cell?.viewWithTag(1001) as? UILabel { // label.text = "(\(detailPageViewModel.thumbups.count))" } if let button = cell?.viewWithTag(1011) as? UIButton { button.addTarget(self, action: #selector(showThumps), for: .touchUpInside) } if let imageView = cell?.viewWithTag(1008) as? UIImageView { // let imageName = detailPageViewModel.thumbupsCount <= 0 ? "收起" : "list-arrow" // imageView.image = UIImage(named : imageName) } return cell?.contentView } else if section == 4 { let cell = tableView.dequeueReusableCell(withIdentifier: "comentHeadCell") if let label = cell?.viewWithTag(1002) as? UILabel { // label.text = "(\(detailPageViewModel.comments.count))" } if let button = cell?.viewWithTag(1012) as? UIButton { button.addTarget(self, action: #selector(showComments), for: .touchUpInside) } if let imageView = cell?.viewWithTag(1009) as? UIImageView { // let imageName = detailPageViewModel.commentsCount <= 0 ? "收起" : "list-arrow" // imageView.image = UIImage(named : imageName) } return cell?.contentView } return nil } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { if section == 3 || section == 4 { return 44 } return 0 } func numberOfSections(in tableView: UITableView) -> Int { return 0 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // if section == 3 { // return detailPageViewModel.thumbupsCount > 0 ? 1 : 0 // } else if section == 4 { // return detailPageViewModel.commentsCount // } return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath.section == 0 { let cell = tableView.dequeueReusableCell(withIdentifier: "headCell", for: indexPath) as! DetailPageHeadCell cell.enterView.isHidden = isHiddenEnterView // cell.setInfo(datas[currentPhotoIndex]) cell.delegate = self if let reportBtn = cell.viewWithTag(40001) as? UIButton { reportBtn.addTarget(self, action: #selector(loadReportController), for: .touchUpInside) // reportBtn.isHidden = !(UserDefaults.Account.bool(forKey: .isAudit)) } return cell } else if indexPath.section == 1 { let cell = tableView.dequeueReusableCell(withIdentifier: "detailPagePhotoCell", for: indexPath) as! DetailPagePhotoCell // cell.datas = datas // cell.currentPhotoIndex = currentPhotoIndex cell.delegate = self cell.first = true cell.collectionView.reloadData() return cell } else if indexPath.section == 2 { let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell", for: indexPath) as! DetailPageNameCell // cell.setInfo(datas[currentPhotoIndex]) return cell } else if indexPath.section == 3 { let cell = tableView.dequeueReusableCell(withIdentifier: "thumbupCell", for: indexPath) as! DetailthumbupImagesCell // if detailPageViewModel.thumbups.count > 0 { // let headers = detailPageViewModel.thumbups.map {$0.avatar} // cell.setInfo(content: headers) // } return cell } else { let cell = tableView.dequeueReusableCell(withIdentifier: "comentCell", for: indexPath) as! DetailCommentCell // cell.setInfo(detailPageViewModel.comments[indexPath.row]) return cell } } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath.section == 0 { return 48 } else if indexPath.section == 1 { return 360 } else if indexPath.section == 2 { return 36 } else if indexPath.section == 3 { return 40 } else { // return 40 + detailPageViewModel.comments[indexPath.row].cellHeigth return 40 } } } extension PhotoDetailViewController { }