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/BoxListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class BoxListView: BaseView {
var folderArr = [
Folder(name: "기본 폴더", color: .gray, webs: [
Web(name: "42 Intra", url: "https://profile.intra.42.fr/"),
Web(name: "42Where", url: "https://where42.kr/"),
Web(name: "42Where", url: "https://www.where42.kr/"),
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굳입니당 !

Web(name: "42Stat", url: "https://stat.42seoul.kr/"),
Web(name: "집현전", url: "https://42library.kr/")
]),
Expand Down
4 changes: 2 additions & 2 deletions iBox/Sources/Presenter/BoxList/BoxListViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class BoxListViewController: BaseNavigationBarViewController<BoxListView> {

extension BoxListViewController: BoxListViewDelegate {
func didSelectWeb(at url: String, withName name: String) {
let viewController = WebViewController()
viewController.title = name
let viewController = PreloadedWebViewController()
viewController.title = name
viewController.selectedWebsite = url
navigationController?.pushViewController(viewController, animated: true)
}
Expand Down
41 changes: 41 additions & 0 deletions iBox/Sources/Presenter/Web/PreloadedWebView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// PreloadedWebView.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import UIKit
import WebKit

import SnapKit

class PreloadedWebView: BaseView {
var selectedWebsite: String? {
didSet {
getWebView()
}
}

private var webView: WKWebView?

override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .systemBackground
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

private func getWebView() {
guard let selectedWebsite else { return }
webView = WebViewPreloader.shared.getWebView(for: URL(string: selectedWebsite)!)
guard let webView else { return }
addSubview(webView)
webView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}

}
33 changes: 33 additions & 0 deletions iBox/Sources/Presenter/Web/PreloadedWebViewController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// PreloadedWebViewController.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import UIKit

class PreloadedWebViewController: BaseNavigationBarViewController<PreloadedWebView> {
var selectedWebsite: String?

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
navigationItem.largeTitleDisplayMode = .never

guard let contentView = contentView as? PreloadedWebView else { return }
contentView.selectedWebsite = selectedWebsite
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

guard let selectedWebsite else { return }
WebViewPreloader.shared.resetWebView(for: URL(string: selectedWebsite)!)
}

override func setupNavigationBar() {
setNavigationBarHidden(true)
}

}
11 changes: 11 additions & 0 deletions iBox/Sources/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
window?.windowScene = windowScene
window?.rootViewController = MainTabBarController()
window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌

// 나중에 userDefaults에 저장해두고 꺼내와서 preload하기
let urlsToPreload = [
URL(string: "https://profile.intra.42.fr/")!,
URL(string: "https://www.where42.kr/")!,
URL(string: "https://stat.42seoul.kr/")!,
URL(string: "https://42library.kr/")!,
URL(string: "https://cabi.42seoul.io/")!,
URL(string: "https://24hoursarenotenough.42seoul.kr/")!
]
WebViewPreloader.shared.preload(urls: urlsToPreload)
}

func sceneDidDisconnect(_ scene: UIScene) {
Expand Down
33 changes: 33 additions & 0 deletions iBox/Sources/Utils/WebViewPreloader.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// WebViewPreloader.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import Foundation
import WebKit

class WebViewPreloader {
static let shared = WebViewPreloader()
private var webViews: [URL: WKWebView] = [:]

private init() {}

func preload(urls: [URL]) {
for url in urls {
let webView = WKWebView()
webView.load(URLRequest(url: url))
webViews[url] = webView
}
}

func getWebView(for url: URL) -> WKWebView? {
return webViews[url]
}

func resetWebView(for url: URL) {
webViews[url]?.load(URLRequest(url: url))
}

}