Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion iBox/Sources/Presenter/BoxList/FolderButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class FolderButton: UIButton {
init(isOpen: Bool) {
self.isOpen = isOpen
super.init(frame: .zero)
backgroundColor = .clear
backgroundColor = .systemGroupedBackground

setupLayout()
}
Expand Down
36 changes: 36 additions & 0 deletions iBox/Sources/Presenter/Favorite/FavoriteView.swift
Original file line number Diff line number Diff line change
@@ -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()
}
}

}
26 changes: 26 additions & 0 deletions iBox/Sources/Presenter/Favorite/FavoriteViewController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// FavoriteViewController.swift
// iBox
//
// Created by 이지현 on 12/27/23.
//

import UIKit

class FavoriteViewController: BaseNavigationBarViewController<FavoriteView> {

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

}
29 changes: 0 additions & 29 deletions iBox/Sources/Presenter/FavoriteViewController.swift

This file was deleted.

12 changes: 8 additions & 4 deletions iBox/Sources/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {

window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.rootViewController = MainTabBarController()


// 앱 테마 정보
window?.overrideUserInterfaceStyle = UserDefaultsManager.theme.value.toUserInterfaceStyle()

window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌

// 나중에 userDefaults에 저장해두고 꺼내와서 preload하기
let urlsToPreload = [
URL(string: "https://profile.intra.42.fr/")!,
Expand All @@ -33,6 +30,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) {
Expand Down
17 changes: 17 additions & 0 deletions iBox/Sources/Utils/WebViewPreloader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}

Expand All @@ -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))
}


}