From 104ae865c4d7a70c71a627e85ad1b59efaa9a0af Mon Sep 17 00:00:00 2001 From: JH713 Date: Wed, 24 Jan 2024 16:46:21 +0900 Subject: [PATCH] feat: favoriteViewController --- .../Presenter/BoxList/FolderButton.swift | 2 +- .../Presenter/Favorite/FavoriteView.swift | 36 +++++++++++++++++++ .../Favorite/FavoriteViewController.swift | 26 ++++++++++++++ .../Presenter/FavoriteViewController.swift | 29 --------------- iBox/Sources/SceneDelegate.swift | 9 +++-- iBox/Sources/Utils/WebViewPreloader.swift | 17 +++++++++ 6 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 iBox/Sources/Presenter/Favorite/FavoriteView.swift create mode 100644 iBox/Sources/Presenter/Favorite/FavoriteViewController.swift delete mode 100644 iBox/Sources/Presenter/FavoriteViewController.swift diff --git a/iBox/Sources/Presenter/BoxList/FolderButton.swift b/iBox/Sources/Presenter/BoxList/FolderButton.swift index a2587f9..e0d3f0f 100644 --- a/iBox/Sources/Presenter/BoxList/FolderButton.swift +++ b/iBox/Sources/Presenter/BoxList/FolderButton.swift @@ -36,7 +36,7 @@ class FolderButton: UIButton { init(isOpen: Bool) { self.isOpen = isOpen super.init(frame: .zero) - backgroundColor = .clear + backgroundColor = .systemGroupedBackground setupLayout() } diff --git a/iBox/Sources/Presenter/Favorite/FavoriteView.swift b/iBox/Sources/Presenter/Favorite/FavoriteView.swift new file mode 100644 index 0000000..3a8380d --- /dev/null +++ b/iBox/Sources/Presenter/Favorite/FavoriteView.swift @@ -0,0 +1,36 @@ +// +// FavoriteView.swift +// iBox +// +// Created by 이지현 on 1/18/24. +// + +import UIKit +import WebKit + +import SnapKit + +class FavoriteView: PreloadedWebView { + + private lazy var webView = WebViewPreloader.shared.getFavoriteView() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .systemBackground + + setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + guard let webView else { return } + addSubview(webView) + webView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + +} diff --git a/iBox/Sources/Presenter/Favorite/FavoriteViewController.swift b/iBox/Sources/Presenter/Favorite/FavoriteViewController.swift new file mode 100644 index 0000000..8fd3527 --- /dev/null +++ b/iBox/Sources/Presenter/Favorite/FavoriteViewController.swift @@ -0,0 +1,26 @@ +// +// FavoriteViewController.swift +// iBox +// +// Created by 이지현 on 12/27/23. +// + +import UIKit + +class FavoriteViewController: BaseNavigationBarViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + guard let _ = contentView as? FavoriteView else { return } + } + + override func viewDidDisappear(_ animated: Bool) { + WebViewPreloader.shared.resetFavoriteView() + } + + override func setupNavigationBar() { + setNavigationBarHidden(true) + } + +} diff --git a/iBox/Sources/Presenter/FavoriteViewController.swift b/iBox/Sources/Presenter/FavoriteViewController.swift deleted file mode 100644 index 336ff88..0000000 --- a/iBox/Sources/Presenter/FavoriteViewController.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// FavoriteViewController.swift -// iBox -// -// Created by 이지현 on 12/27/23. -// - -import UIKit - -class FavoriteViewController: BaseViewController { - - override func viewDidLoad() { - super.viewDidLoad() - let favorite = UserDefaultsManager.favorite.value - print("\(favorite.name) : \(favorite.url)") - } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} diff --git a/iBox/Sources/SceneDelegate.swift b/iBox/Sources/SceneDelegate.swift index f9f319e..2d0aced 100644 --- a/iBox/Sources/SceneDelegate.swift +++ b/iBox/Sources/SceneDelegate.swift @@ -16,8 +16,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - window?.rootViewController = MainTabBarController() - window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌 // 나중에 userDefaults에 저장해두고 꺼내와서 preload하기 let urlsToPreload = [ @@ -29,6 +27,13 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { URL(string: "https://24hoursarenotenough.42seoul.kr/")! ] WebViewPreloader.shared.preload(urls: urlsToPreload) + + let favorite = UserDefaultsManager.favorite.value + guard let favoriteUrl = URL(string: favorite.url) else { return } + WebViewPreloader.shared.preloadFavoriteView(url: favoriteUrl) + + window?.rootViewController = MainTabBarController() + window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌 } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/iBox/Sources/Utils/WebViewPreloader.swift b/iBox/Sources/Utils/WebViewPreloader.swift index d92b7e7..fc8b4a6 100644 --- a/iBox/Sources/Utils/WebViewPreloader.swift +++ b/iBox/Sources/Utils/WebViewPreloader.swift @@ -11,6 +11,7 @@ import WebKit class WebViewPreloader { static let shared = WebViewPreloader() private var webViews: [URL: WKWebView] = [:] + private var favoriteView: (url: URL, webView: WKWebView)? private init() {} @@ -22,12 +23,28 @@ class WebViewPreloader { } } + func preloadFavoriteView(url: URL) { + let webView = WKWebView() + webView.load(URLRequest(url: url)) + favoriteView = (url, webView) + } + func getWebView(for url: URL) -> WKWebView? { return webViews[url] } + func getFavoriteView() -> WKWebView? { + return favoriteView?.webView + } + func resetWebView(for url: URL) { webViews[url]?.load(URLRequest(url: url)) } + + func resetFavoriteView() { + guard let favoriteView else { return } + favoriteView.webView.load(URLRequest(url: favoriteView.url)) + } + }