diff --git a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/OnboardingViewController/OnboardingViewController.swift b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/OnboardingViewController/OnboardingViewController.swift index 7d25935..50e452c 100644 --- a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/OnboardingViewController/OnboardingViewController.swift +++ b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/OnboardingViewController/OnboardingViewController.swift @@ -146,7 +146,7 @@ extension OnboardingViewController: UICollectionViewDelegate, UICollectionViewDa func scrollViewDidScroll(_ scrollView: UIScrollView) { let width = scrollView.frame.width - currentPage = lroundl(scrollView.contentOffset.x / width) + currentPage = lroundl(Float80(scrollView.contentOffset.x / width)) } } diff --git a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapBottomSheetViewController/StudioMapContentViewController/StudioMapContentViewController.swift b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapBottomSheetViewController/StudioMapContentViewController/StudioMapContentViewController.swift index 0098d62..d66d3ad 100644 --- a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapBottomSheetViewController/StudioMapContentViewController/StudioMapContentViewController.swift +++ b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapBottomSheetViewController/StudioMapContentViewController/StudioMapContentViewController.swift @@ -27,9 +27,12 @@ class StudioMapContentViewController: UIViewController { let timeLabel = UILabel() let callLabel = UILabel() let priceLabel = UILabel() - let linkButton = UIButton() let photoReviewLabel = UILabel() let underlineView = UIView() + var linkButton = UIButton().then { + $0.titleLabel?.font = .body1 + } + var selectedStudioInfo = StudioInfo(id: 0, name: "필린 사진관", address: "솝트시 앱잼구 필린로", price: "3000원", time: "11:00-12:00", tel: "010-0000-0000", lati: 0, long: 0, etc: "많관부~", isDeleted: false, site: "https://www.naver.com/") let studioCollectionview: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical @@ -42,14 +45,15 @@ class StudioMapContentViewController: UIViewController { // MARK: - View Cycle override func viewDidLoad() { super.viewDidLoad() + setupAttribute() setupUI() register() - studioPhotosWithAPI(studioID: StudioMapViewController.selectedMarkerID ?? 0) + studioPhotosWithAPI(studioID: selectedStudioInfo.id ?? 0) } override func viewDidAppear(_ animated: Bool) { - studioPhotosWithAPI(studioID: StudioMapViewController.selectedMarkerID ?? 0) + studioPhotosWithAPI(studioID: selectedStudioInfo.id ?? 0) } // MARK: - Func @@ -89,7 +93,7 @@ class StudioMapContentViewController: UIViewController { } // Label view.add(studioLabel) { - $0.text = StudioMapViewController.name + $0.text = self.selectedStudioInfo.name $0.textColor = .white $0.font = .headline $0.snp.makeConstraints { @@ -100,11 +104,13 @@ class StudioMapContentViewController: UIViewController { } view.add(scrapButton) { $0.setImage(Asset.btnScrap.image, for: .normal) + $0.setImage(Asset.btnScrapActive.image, for: .selected) $0.snp.makeConstraints { $0.top.equalTo(self.view.snp.top).offset(36) $0.trailing.equalTo(self.view.snp.trailing).offset(-18) $0.width.height.equalTo(32) } + $0.addTarget(self, action: #selector(self.scrapButtonDidTap), for: .touchUpInside) } studioScrollContainverView.add(firstdividerView) { $0.backgroundColor = .darkGrey3 @@ -117,10 +123,10 @@ class StudioMapContentViewController: UIViewController { } // Label studioScrollContainverView.add(locationLabel) { - if StudioMapViewController.address == nil { + if self.selectedStudioInfo.address == nil { $0.text = "등록된 주소가 없습니다." } else { - $0.text = StudioMapViewController.address + $0.text = self.selectedStudioInfo.address } $0.numberOfLines = 0 $0.font = .body2 @@ -133,10 +139,10 @@ class StudioMapContentViewController: UIViewController { } } studioScrollContainverView.add(timeLabel) { - if StudioMapViewController.time == nil { + if self.selectedStudioInfo.time == nil { $0.text = "등록된 운영시간이 없습니다." } else { - $0.text = StudioMapViewController.time + $0.text = self.selectedStudioInfo.time } $0.numberOfLines = 0 $0.font = .body2 @@ -149,10 +155,10 @@ class StudioMapContentViewController: UIViewController { } } studioScrollContainverView.add(callLabel) { - if StudioMapViewController.tel == nil { + if self.selectedStudioInfo.tel == nil { $0.text = "등록된 전화번호가 없습니다." } else { - $0.text = StudioMapViewController.tel + $0.text = self.selectedStudioInfo.tel } $0.numberOfLines = 0 $0.font = .body2 @@ -165,10 +171,10 @@ class StudioMapContentViewController: UIViewController { } } studioScrollContainverView.add(priceLabel) { - if StudioMapViewController.price == nil { + if self.selectedStudioInfo.price == nil { $0.text = "등록된 가격정보가 없습니다." } else { - $0.text = StudioMapViewController.price + $0.text = self.selectedStudioInfo.price } $0.numberOfLines = 0 $0.font = .body2 @@ -181,13 +187,7 @@ class StudioMapContentViewController: UIViewController { } } studioScrollContainverView.add(linkButton) { - $0.titleLabel?.font = .body1 - $0.snp.makeConstraints { - $0.top.equalTo(self.priceLabel.snp.bottom).offset(18) - $0.leading.equalTo(self.studioScrollContainverView.snp.leading).offset(48) - $0.height.equalTo(18) - } - if StudioMapViewController.site == nil { + if self.selectedStudioInfo.site == nil { $0.setTitle("웹사이트가 없습니다 ", for: .normal) $0.setTitleColor(.grey4, for: .normal) } else { @@ -195,6 +195,11 @@ class StudioMapContentViewController: UIViewController { $0.setTitleColor(.fillinRed, for: .normal) self.linkButton.addTarget(self, action: #selector(self.touchLinkButton), for: .touchUpInside) } + $0.snp.makeConstraints { + $0.top.equalTo(self.priceLabel.snp.bottom).offset(18) + $0.leading.equalTo(self.studioScrollContainverView.snp.leading).offset(48) + $0.height.equalTo(18) + } } // 아이콘 studioScrollContainverView.add(locationImageView) { @@ -244,7 +249,7 @@ class StudioMapContentViewController: UIViewController { $0.leading.equalTo(self.linkButton.snp.leading) $0.height.equalTo(1) } - if StudioMapViewController.site == nil { + if self.selectedStudioInfo.site == nil { $0.backgroundColor = .grey4 $0.snp.makeConstraints { $0.width.equalTo(106) @@ -289,13 +294,15 @@ class StudioMapContentViewController: UIViewController { // MARK: - @objc @objc func touchLinkButton() { - let studioUrl = NSURL(string: StudioMapViewController.site ?? "none site") + let studioUrl = NSURL(string: selectedStudioInfo.site ?? "none site") let studioSafariView: SFSafariViewController = SFSafariViewController(url: studioUrl! as URL) self.present(studioSafariView, animated: true, completion: nil) } - + @objc func scrapButtonDidTap(_ sender: UIButton) { + sender.isSelected.toggle() + } @objc func notiStudioPhotoswithAPI(_ notification: Notification) { - studioPhotosWithAPI(studioID: StudioMapViewController.selectedMarkerID ?? 0) + studioPhotosWithAPI(studioID: selectedStudioInfo.id ?? 0) } } diff --git a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapViewController/StudioMapViewController.swift b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapViewController/StudioMapViewController.swift index f0b3c9e..ebcf163 100644 --- a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapViewController/StudioMapViewController.swift +++ b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/StudioMapViewController/StudioMapViewController.swift @@ -7,14 +7,14 @@ import UIKit -import NMapsMap -import CoreLocation import SnapKit import Then +import NMapsMap +import CoreLocation import MapKit class StudioMapViewController: UIViewController { - + // MARK: - Properties (BottomSheet) enum BottomSheetViewState { case expanded @@ -23,48 +23,34 @@ class StudioMapViewController: UIViewController { private let contentViewController: UIViewController private var bottomSheetViewTopConstraint: NSLayoutConstraint! - var bottomSheetPanMinTopConstant: CGFloat = 50.0 - var bottomHeight: CGFloat = UIScreen.main.bounds.size.height*(3/7) - let defaultHeight: CGFloat = UIScreen.main.bounds.size.height*(3/7) + private let bottomSheetPanMinTopConstant: CGFloat = 50.0 + private var bottomHeight: CGFloat = UIScreen.main.bounds.size.height*(3/7) + private let defaultHeight: CGFloat = UIScreen.main.bounds.size.height*(3/7) private lazy var bottomSheetPanStartingTopConstant: CGFloat = bottomSheetPanMinTopConstant - let bottomSheetView: UIView = { - let view = UIView() - view.backgroundColor = .darkGrey2 - - return view - }() + let bottomSheetView = UIView().then { + $0.backgroundColor = .darkGrey2 + } - private let dismissIndicatorView: UIView = { - let view = UIView() - view.backgroundColor = .darkGrey1 - view.layer.cornerRadius = 3 - - return view - }() + private let dismissIndicatorView = UIView().then { + $0.backgroundColor = .darkGrey1 + $0.layer.cornerRadius = 3 + } // MARK: - Properties - static var name: String? - static var address: String? - static var time: String? - static var tel: String? - static var price: String? - static var site: String? - static var selectedMarkerID: Int? - static var lati: Double? - static var long: Double? - - var serverStudioInfo: StudioInfoResponse? - var serverStudios: StudioResponse? + var serverStudioInfo = StudioInfoResponse(studio: StudioInfo(id: 0, name: "", address: "", price: "", time: "", tel: "", lati: 0, long: 0, etc: "", isDeleted: false, site: "")) + var serverStudios = StudioResponse(studios: []) + var selectedMarkerInfo = Studio(id: 0, lati: 0, long: 0) var selectedMarker: NMFMarker? - var selectedMarkerInfo: Studio? - let mapView = NMFNaverMapView(frame: .zero) - let myLocationButton = UIButton() - let dataSource = NMFInfoWindowDefaultTextSource.data() - let magnifyingGlassButton = UIButton().then { + var locationManager = CLLocationManager() + + // MARK: - UI Properties + private let navigationBar = FilinNavigationBar() + private let mapView = NMFNaverMapView(frame: .zero) + private let magnifyingGlassButton = UIButton().then { $0.setImage(Asset.icnSearch.image, for: .normal) } - let searchPlaceTextField = UITextField().then { + private lazy var searchPlaceTextField = UITextField().then { $0.backgroundColor = .darkGrey2 $0.layer.borderColor = UIColor.fillinRed.cgColor $0.layer.borderWidth = 1 @@ -72,26 +58,20 @@ class StudioMapViewController: UIViewController { $0.font = .body2 $0.setPlaceHolder() $0.addLeftPadding() + $0.addTarget(self, action: #selector(textFieldDidBeginEditing(_:)), for: .touchDown) + } + private lazy var myLocationButton = UIButton().then { + $0.setImage(Asset.icnMyLocation.image, for: .normal) + $0.addTarget(self, action: #selector(touchLocationButton), for: .touchUpInside) } - var clickCount = 0 - var locationManager = CLLocationManager() - let navigationBar = FilinNavigationBar() // MARK: - View Life Cycle override func viewDidLoad() { super.viewDidLoad() - setUpMapView() - setUpNavigationBar() - layoutMapView() - layoutMyLocationButton() - layoutSearchView() - layoutNavigaionBar() - getBottomSheetInfo() + + setAttribute() + setLayout() totalStudioWithAPI() - setLatLngNotification() - tmpSetupMarker() - setupBottomSheetUI() - setupBottomSheetGestureRecognizer() } // MARK: - init @@ -106,48 +86,33 @@ class StudioMapViewController: UIViewController { } // MARK: - Extensions + extension StudioMapViewController { + private func setAttribute() { + tmpSetupMarker() + setUpMapView() + setUpBottomSheetUI() + setUpMarkerInfo() + setUpNavigationBar() + setUpBottomSheetGestureRecognizer() + setLatLngNotification() + } - /// 서버 부활되기 전까지 현상소 관련 기능 테스트할 임시 함수 (네이버 그린팩토리에 현상소 표시해줌) - func tmpSetupMarker() { - let markertmp = NMFMarker(position: NMGLatLng(lat: 37.35940010181669, lng: 127.10475679570187)) + private func tmpSetupMarker() { + let markertmp = NMFMarker(position: NMGLatLng(lat: 37.556393, lng: 126.9716552)) markertmp.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) markertmp.mapView = self.mapView.mapView - - let secondMarkertmp = NMFMarker(position: NMGLatLng(lat: 37.36161841308457, lng: 127.10566240106306)) - secondMarkertmp.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) - secondMarkertmp.mapView = self.mapView.mapView - - secondMarkertmp.touchHandler = { [weak self] (overlay: NMFOverlay) -> Bool in - if self?.selectedMarker == nil { /// 클릭했던 현상소가 없는 경우 (지도뷰 처음 들어올 떄) - self?.selectedMarker = secondMarkertmp - self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) - self?.showBottomSheet() - } else { - if self?.selectedMarker == secondMarkertmp { /// 클릭했던 현상소를 다시 클릭하는 경우 - self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) - self?.hideBottomSheetAndGoBack() - } else { /// 다른 현상소 클릭 - self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) - self?.selectedMarker = secondMarkertmp - self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) - self?.showBottomSheet() - } - } - return true - } - - markertmp.touchHandler = { [weak self] (overlay: NMFOverlay) -> Bool in - if self?.selectedMarker == nil { /// 클릭했던 현상소가 없는 경우 (지도뷰 처음 들어올 떄) + markertmp.touchHandler = { [weak self] (_: NMFOverlay) -> Bool in + if self?.selectedMarker == nil { self?.selectedMarker = markertmp self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) self?.showBottomSheet() } else { - if self?.selectedMarker == markertmp { /// 클릭했던 현상소를 다시 클릭하는 경우 + if self?.selectedMarker == markertmp { self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) self?.selectedMarker = nil self?.hideBottomSheetAndGoBack() - } else { /// 다른 현상소 클릭 + } else { self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) self?.selectedMarker = markertmp self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) @@ -172,30 +137,29 @@ extension StudioMapViewController { locationManager.delegate = self self.locationManager.requestWhenInUseAuthorization() } - + private func setUpMarkerInfo() { self.mapView.mapView.touchDelegate = self - serverStudios?.studios.forEach { + serverStudios.studios.forEach { let marker = NMFMarker(position: NMGLatLng(lat: $0.lati, lng: $0.long)) let markerInfo = Studio(id: $0.id, lati: $0.lati, long: $0.long) marker.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) - self.selectedMarkerInfo = markerInfo - StudioMapViewController.selectedMarkerID = markerInfo.id - self.studioInfoWithAPI(studioID: markerInfo.id) + selectedMarkerInfo = markerInfo + studioInfoWithAPI(studioID: markerInfo.id) - marker.touchHandler = { [weak self] (overlay: NMFOverlay) -> Bool in - if self?.selectedMarker == nil { /// 클릭했던 현상소가 없는 경우 (지도뷰 처음 들어올 떄) + marker.touchHandler = { [weak self] (_: NMFOverlay) -> Bool in + if self?.selectedMarker == nil { self?.selectedMarker = marker self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) self?.showBottomSheet() } else { - if self?.selectedMarker == marker { /// 클릭했던 현상소를 다시 클릭하는 경우 + if self?.selectedMarker == marker { self?.selectedMarker = nil self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) self?.hideBottomSheetAndGoBack() - } else { /// 다른 현상소 클릭 + } else { self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudio.image) self?.selectedMarker = marker self?.selectedMarker?.iconImage = NMFOverlayImage(image: Asset.icnStudioSelected.image) @@ -208,88 +172,67 @@ extension StudioMapViewController { } } - func getBottomSheetInfo() { - StudioMapViewController.name = "필린 현상소" - StudioMapViewController.address = "솝트시 앱잼구 필린동 아요로 12번길 13" - StudioMapViewController.time = "open 00:00-24:00" - StudioMapViewController.tel = "010-1234-5678" - StudioMapViewController.price = "컬러 5000000000원" - StudioMapViewController.site = "" - -// StudioMapViewController.name = self.serverStudioInfo?.studio.name -// StudioMapViewController.address = self.serverStudioInfo?.studio.address -// StudioMapViewController.time = self.serverStudioInfo?.studio.time -// StudioMapViewController.tel = self.serverStudioInfo?.studio.tel -// StudioMapViewController.price = self.serverStudioInfo?.studio.price -// StudioMapViewController.site = self.serverStudioInfo?.studio.site - } - private func setUpNavigationBar() { self.navigationController?.navigationBar.isHidden = true navigationBar.popViewController = { self.navigationController?.popViewController(animated: true) } } + + private func setLatLngNotification() { + NotificationCenter.default.addObserver(self, selector: #selector(getLatLng(_:)), name: Notification.Name("GetLatLng"), object: nil) + } +} + +extension StudioMapViewController { + private func setLayout() { + layoutMapView() + layoutMyLocationButton() + layoutSearchView() + layoutNavigaionBar() + view.bringSubviewToFront(bottomSheetView) + view.bringSubviewToFront(dismissIndicatorView) + } private func layoutMapView() { mapView.snp.makeConstraints { - $0.top.equalTo(self.view.safeAreaLayoutGuide.snp.top) - $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading) - $0.bottom.equalTo(self.view.snp.bottom) - $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing) + $0.top.leading.trailing.equalTo(view.safeAreaLayoutGuide) + $0.bottom.equalToSuperview() } } private func layoutMyLocationButton() { view.addSubview(myLocationButton) - myLocationButton.setImage(Asset.icnMyLocation.image, for: .normal) myLocationButton.snp.makeConstraints { $0.trailing.equalToSuperview().offset(-20) $0.bottom.equalToSuperview().offset(-48) } - myLocationButton.addTarget(self, action: #selector(touchLocationButton), for: .touchUpInside) } private func layoutSearchView() { - view.addSubview(searchPlaceTextField) - view.addSubview(magnifyingGlassButton) + view.addSubviews([searchPlaceTextField, magnifyingGlassButton]) + searchPlaceTextField.snp.makeConstraints { + $0.top.equalTo(view.safeAreaLayoutGuide).inset(68) + $0.leading.trailing.equalToSuperview().inset(18) + $0.height.equalTo(48) + } magnifyingGlassButton.snp.makeConstraints { - $0.top.equalTo(searchPlaceTextField).inset(11) - $0.leading.equalTo(searchPlaceTextField).inset(295) - $0.bottom.equalTo(searchPlaceTextField).inset(11) + $0.centerY.equalTo(searchPlaceTextField) $0.trailing.equalTo(searchPlaceTextField).inset(18) } - searchPlaceTextField.snp.makeConstraints { - $0.top.equalTo(self.view.safeAreaLayoutGuide).inset(68) - $0.leading.equalTo(self.view).inset(18) - $0.trailing.equalTo(self.view).inset(18) - $0.size.height.equalTo(48) - } - searchPlaceTextField.addTarget(self, action: #selector(textFieldDidBeginEditing(_:)), for: .touchDown) } func layoutNavigaionBar() { - view.add(navigationBar) { - self.navigationBar.popViewController = { - self.navigationController?.popViewController(animated: true) - } - $0.snp.makeConstraints { - $0.top.equalTo(self.view.safeAreaLayoutGuide.snp.top) - $0.leading.trailing.equalToSuperview() - $0.height.equalTo(50) - } + view.add(navigationBar) + navigationBar.snp.makeConstraints { + $0.top.equalTo(view.safeAreaLayoutGuide) + $0.leading.trailing.equalToSuperview() + $0.height.equalTo(50) } } - func setLatLngNotification() { - NotificationCenter.default.addObserver(self, selector: #selector(getLatLng(_:)), name: Notification.Name("GetLatLng"), object: nil) - } - // MARK: - @objc @objc func getLatLng(_ notification: Notification) { let selectedStudioId = notification.object as? Int ?? 0 studioInfoWithAPI(studioID: selectedStudioId) - - let cameraUpdate = NMFCameraUpdate(scrollTo: NMGLatLng(lat: StudioMapViewController.lati ?? 0, lng: StudioMapViewController.long ?? 0)) - mapView.mapView.moveCamera(cameraUpdate) } @objc func textFieldDidBeginEditing(_ textField: UITextField) { @@ -298,9 +241,9 @@ extension StudioMapViewController { newVC.modalPresentationStyle = .fullScreen self.present(newVC, animated: true, completion: nil) } - + @objc func touchLocationButton(_ sender: UIButton) { - sender.isSelected = !sender.isSelected + sender.isSelected.toggle() mapView.mapView.positionMode = .direction } } @@ -324,7 +267,6 @@ extension UITextField { // MARK: - Extension - CLLocationManagerDelegate extension StudioMapViewController: CLLocationManagerDelegate { - func getLocationUsagePermission() { self.locationManager.requestWhenInUseAuthorization() } @@ -371,19 +313,13 @@ extension StudioMapViewController { } } } -} - -extension StudioMapViewController { func studioInfoWithAPI(studioID: Int) { StudioMapAPI.shared.infoStudio(studioID: studioID) { response in switch response { case .success(let data): if let studioinfo = data as? StudioInfoResponse { self.serverStudioInfo = studioinfo - StudioMapViewController.lati = studioinfo.studio.lati - StudioMapViewController.long = studioinfo.studio.long - - let cameraUpdate = NMFCameraUpdate(scrollTo: NMGLatLng(lat: StudioMapViewController.lati ?? 0, lng: StudioMapViewController.long ?? 0)) + let cameraUpdate = NMFCameraUpdate(scrollTo: NMGLatLng(lat: studioinfo.studio.lati ?? 0, lng: studioinfo.studio.long ?? 0)) self.mapView.mapView.moveCamera(cameraUpdate) NotificationCenter.default.post(name: Notification.Name.studioPhotoswithAPI, object: nil) self.showBottomSheet() @@ -401,31 +337,30 @@ extension StudioMapViewController { } } -// MARK: - Extension - BottomSheet +// MARK: - BottomSheet extension StudioMapViewController { - - private func setupBottomSheetUI() { + private func setUpBottomSheetUI() { addChild(contentViewController) bottomSheetView.addSubview(contentViewController.view) contentViewController.didMove(toParent: self) view.addSubviews([bottomSheetView, dismissIndicatorView]) - + let viewPan = UIPanGestureRecognizer(target: self, action: #selector(viewPanned(_:))) viewPan.delaysTouchesBegan = false viewPan.delaysTouchesEnded = false view.addGestureRecognizer(viewPan) - setupBottomSheetLayout() + setUpBottomSheetLayout() } - private func setupBottomSheetGestureRecognizer() { + private func setUpBottomSheetGestureRecognizer() { let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(panGesture)) swipeGesture.direction = .down view.addGestureRecognizer(swipeGesture) } - private func setupBottomSheetLayout() { + private func setUpBottomSheetLayout() { contentViewController.view.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ contentViewController.view.topAnchor.constraint(equalTo: bottomSheetView.topAnchor), @@ -454,7 +389,6 @@ extension StudioMapViewController { } private func showBottomSheet(atState: BottomSheetViewState = .normal) { - getBottomSheetInfo() if atState == .normal { changeScrollDisabled() let safeAreaHeight: CGFloat = view.safeAreaLayoutGuide.layoutFrame.height @@ -479,13 +413,13 @@ extension StudioMapViewController { self.view.layoutIfNeeded() }) } - + func nearest(to number: CGFloat, inValues values: [CGFloat]) -> CGFloat { guard let nearestVal = values.min(by: { abs(number - $0) < abs(number - $1) }) else { return number } return nearestVal } - + func changeScrollEnabled() { let contentVC = children.first as? StudioMapContentViewController contentVC?.studioScrollview.isScrollEnabled = true