From c6e358169fa8118665f78ab39b517b084488f7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9D=B8?= <0inn1220@gmail.com> Date: Wed, 13 Jul 2022 13:50:17 +0900 Subject: [PATCH] =?UTF-8?q?[Design]=20#28=20-=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20UI=20=EC=A7=80=EB=8F=84=20=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지도 보기 클릭 및 스크롤 구현 --- .../SearchScene/VC/SearchResultVC.swift | 112 ++++++++++++++++-- 1 file changed, 104 insertions(+), 8 deletions(-) diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchResultVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchResultVC.swift index 42e0496f..8bca0b3e 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchResultVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchResultVC.swift @@ -19,10 +19,11 @@ final class SearchResultVC: UIViewController { var searchContent: String = "" weak var delegate: SearchResultVCDelegate? + private var isBottom: Bool = true private let mapView: UIView = { let view = UIView() - view.backgroundColor = .mainRed + view.backgroundColor = .mainGreen return view }() @@ -39,7 +40,7 @@ final class SearchResultVC: UIViewController { private lazy var backButton: UIButton = { let btn = UIButton() - btn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 12) + btn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 12) btn.setImage(ImageLiterals.Search.beforeIcon, for: .normal) btn.addTarget(self, action: #selector(popToSearchVC), for: .touchUpInside) return btn @@ -50,15 +51,41 @@ final class SearchResultVC: UIViewController { view.backgroundColor = .helfmeLineGray return view }() - + + private let searchResultHeaderView: UIView = UIView() + + private lazy var searchResultHeaderButton: UIButton = { + let btn = UIButton() + btn.setTitle("지도 뷰로 보기", for: .normal) + btn.setTitleColor(UIColor.helfmeGray1, for: .normal) + btn.titleLabel?.font = .NotoRegular(size: 14) + btn.isHidden = true + btn.addTarget(self, action: #selector(moveSearchResultView), for: .touchUpInside) + return btn + }() + + private lazy var searchResultTableView: UITableView = { + let tv = UITableView() + tv.separatorStyle = .none + tv.showsVerticalScrollIndicator = false + tv.rowHeight = 127 + tv.backgroundColor = .helfmeWhite + tv.keyboardDismissMode = .onDrag + tv.tableHeaderView = searchResultHeaderView + tv.tableHeaderView?.frame.size.height = 56 + return tv + }() + // MARK: - View Life Cycle override func viewDidLoad() { super.viewDidLoad() + initUI() setUI() setLayout() setDelegate() + registerCell() } } @@ -69,29 +96,39 @@ extension SearchResultVC { delegate?.searchResultVCSearchType(type: .recent) navigationController?.popViewController(animated: false) } + + @objc func moveSearchResultView() { + initUI() + } } // MARK: - Methods extension SearchResultVC { + private func initUI() { + UIView.animate(withDuration: 0.2, animations: { + self.searchResultTableView.transform = CGAffineTransform(translationX: 0, y: 500) + }) + searchResultHeaderButton.isHidden = true + isBottom = true + } + private func setUI() { self.navigationController?.isNavigationBarHidden = true view.backgroundColor = .helfmeWhite } private func setLayout() { - view.addSubviews(searchTextField, lineView) + view.addSubviews(searchTextField, lineView, mapView, searchResultTableView) searchTextField.snp.makeConstraints { - $0.top.equalTo(view.safeAreaLayoutGuide) - $0.leading.equalTo(view.safeAreaLayoutGuide).inset(20) - $0.trailing.equalTo(view.safeAreaLayoutGuide).inset(25) + $0.top.leading.trailing.equalTo(view.safeAreaLayoutGuide) $0.height.equalTo(56) } backButton.snp.makeConstraints { $0.height.equalTo(24) - $0.width.equalTo(36) + $0.width.equalTo(56) } lineView.snp.makeConstraints { @@ -99,10 +136,34 @@ extension SearchResultVC { $0.leading.trailing.equalTo(view.safeAreaLayoutGuide) $0.height.equalTo(1) } + + mapView.snp.makeConstraints { + $0.top.equalTo(lineView.snp.bottom) + $0.leading.trailing.bottom.equalToSuperview() + } + + searchResultHeaderView.addSubviews(searchResultHeaderButton) + + searchResultHeaderButton.snp.makeConstraints { + $0.trailing.equalTo(searchResultHeaderView.snp.trailing).inset(20) + $0.centerY.equalTo(searchResultHeaderView) + } + + searchResultTableView.snp.makeConstraints { + $0.top.equalTo(lineView.snp.bottom) + $0.leading.trailing.bottom.equalToSuperview() + } } private func setDelegate() { searchTextField.delegate = self + + searchResultTableView.delegate = self + searchResultTableView.dataSource = self + } + + private func registerCell() { + SearchResultTVC.register(target: searchResultTableView) } } @@ -115,6 +176,41 @@ extension SearchResultVC: UITextFieldDelegate { } } +// MARK: - UITableViewDelegate + +extension SearchResultVC: UITableViewDelegate { + +} + +// MARK: - UITableViewDataSource + +extension SearchResultVC: UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 10 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: SearchResultTVC.className, for: indexPath) as? SearchResultTVC else { return UITableViewCell() } + return cell + } +} + +// MARK: - UIScrollViewDelegate + +extension SearchResultVC: UIScrollViewDelegate { + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + if (scrollView.contentOffset.y == 0 && isBottom) { + self.searchResultTableView.isScrollEnabled = false + UIView.animate(withDuration: 0.2, animations: { + self.searchResultTableView.transform = CGAffineTransform(translationX: 0, y: 0) + self.searchResultHeaderButton.isHidden = false + }) + } + isBottom = false + self.searchResultTableView.isScrollEnabled = true + } +} + // MARK: - Network extension SearchResultVC {