diff --git a/ReaderHive.xcodeproj/project.pbxproj b/ReaderHive.xcodeproj/project.pbxproj index 48cf5b1..ab58e3e 100644 --- a/ReaderHive.xcodeproj/project.pbxproj +++ b/ReaderHive.xcodeproj/project.pbxproj @@ -122,7 +122,6 @@ F34349082ED945DA00AA7E70 /* NRCoreText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34349072ED945DA00AA7E70 /* NRCoreText.swift */; }; F343490A2ED96EE600AA7E70 /* NRNovelReadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34349092ED96EE600AA7E70 /* NRNovelReadView.swift */; }; F343490C2ED9751800AA7E70 /* NRReadChapterCatalogModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F343490B2ED9751800AA7E70 /* NRReadChapterCatalogModel.swift */; }; - F343490E2ED9A5D000AA7E70 /* NRNovelReadMoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F343490D2ED9A5D000AA7E70 /* NRNovelReadMoreView.swift */; }; F34349102ED9A77A00AA7E70 /* NRPanModalContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F343490F2ED9A77A00AA7E70 /* NRPanModalContentView.swift */; }; F34349122EDA84F100AA7E70 /* NRProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34349112EDA84F100AA7E70 /* NRProgressView.swift */; }; F34349142EDA9AE900AA7E70 /* NRNovelReadSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34349132EDA9AE900AA7E70 /* NRNovelReadSettingView.swift */; }; @@ -303,7 +302,6 @@ F34349072ED945DA00AA7E70 /* NRCoreText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRCoreText.swift; sourceTree = ""; }; F34349092ED96EE600AA7E70 /* NRNovelReadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRNovelReadView.swift; sourceTree = ""; }; F343490B2ED9751800AA7E70 /* NRReadChapterCatalogModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRReadChapterCatalogModel.swift; sourceTree = ""; }; - F343490D2ED9A5D000AA7E70 /* NRNovelReadMoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRNovelReadMoreView.swift; sourceTree = ""; }; F343490F2ED9A77A00AA7E70 /* NRPanModalContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRPanModalContentView.swift; sourceTree = ""; }; F34349112EDA84F100AA7E70 /* NRProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRProgressView.swift; sourceTree = ""; }; F34349132EDA9AE900AA7E70 /* NRNovelReadSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NRNovelReadSettingView.swift; sourceTree = ""; }; @@ -842,7 +840,6 @@ F34348FC2ED8561300AA7E70 /* NRNovelReadContentBottomView.swift */, F34348FE2ED85BF200AA7E70 /* NRReadBatteryView.swift */, F34349092ED96EE600AA7E70 /* NRNovelReadView.swift */, - F343490D2ED9A5D000AA7E70 /* NRNovelReadMoreView.swift */, F34349132EDA9AE900AA7E70 /* NRNovelReadSettingView.swift */, F34349172EDAA02900AA7E70 /* NRNovelReadSettingItemView.swift */, F34349152EDA9FC700AA7E70 /* NRReadSettingBrightnessView.swift */, @@ -1133,7 +1130,6 @@ F34348F72ED84B0D00AA7E70 /* NRNovelReaderViewController+Page.swift in Sources */, 039810902ED060EF0006E317 /* NRViewController.swift in Sources */, 039810702ED053910006E317 /* String+NRAdd.swift in Sources */, - F343490E2ED9A5D000AA7E70 /* NRNovelReadMoreView.swift in Sources */, 039810932ED062CE0006E317 /* NRHomeViewController.swift in Sources */, 039810BC2ED43C8E0006E317 /* NRReadWhatViewTransformer.swift in Sources */, 039810D02ED54D370006E317 /* NRHomeCategoryTagView.swift in Sources */, diff --git a/ReaderHive/Base/Networking/NRNetwork.swift b/ReaderHive/Base/Networking/NRNetwork.swift index 1b3ab0c..0d76c77 100644 --- a/ReaderHive/Base/Networking/NRNetwork.swift +++ b/ReaderHive/Base/Networking/NRNetwork.swift @@ -80,7 +80,9 @@ class NRNetwork: NSObject { completion?(res) } else { if code == 402, parameters.isToast { - NRToast.show(text: "network_error_1".localized) + DispatchQueue.main.async { + NRToast.show(text: "network_error_1".localized) + } } //重新获取token self.requestToken { token in @@ -121,7 +123,9 @@ class NRNetwork: NSObject { let response: NRNetwork.Response = _deserialize(data: tempData) if !response.isSuccess{ if parameters.isToast { - NRToast.show(text: response.msg) + DispatchQueue.main.async { + NRToast.show(text: response.msg) + } } } completion?(response) diff --git a/ReaderHive/Class/Home/V/NRHomeNovelHotTagView.swift b/ReaderHive/Class/Home/V/NRHomeNovelHotTagView.swift index 9e1a128..1df2f3e 100644 --- a/ReaderHive/Class/Home/V/NRHomeNovelHotTagView.swift +++ b/ReaderHive/Class/Home/V/NRHomeNovelHotTagView.swift @@ -8,6 +8,7 @@ import UIKit import SnapKit import collection_view_layouts +import YYCategories class NRHomeNovelHotTagView: UIView { @@ -129,6 +130,12 @@ extension NRHomeNovelHotTagView: UICollectionViewDelegate, UICollectionViewDataS return dataArr.count } + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let vc = NRNovelGenresViewController() + vc.model = self.dataArr[indexPath.row] + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } + } extension NRHomeNovelHotTagView: LayoutDelegate { diff --git a/ReaderHive/Class/Me/V/NRMeHeaderView.swift b/ReaderHive/Class/Me/V/NRMeHeaderView.swift index 8ece14c..8f97b7b 100644 --- a/ReaderHive/Class/Me/V/NRMeHeaderView.swift +++ b/ReaderHive/Class/Me/V/NRMeHeaderView.swift @@ -16,7 +16,7 @@ class NRMeHeaderView: UITableViewHeaderFooterView { let imageView = NRImageView() imageView.layer.cornerRadius = 30 imageView.layer.borderWidth = 1 - imageView.layer.borderColor = UIColor.black.withAlphaComponent(0.15).cgColor + imageView.layer.borderColor = UIColor.white.withAlphaComponent(0.5).cgColor return imageView }() diff --git a/ReaderHive/Class/Novel/V/Reader/NRNovelReadMoreView.swift b/ReaderHive/Class/Novel/V/Reader/NRNovelReadMoreView.swift deleted file mode 100644 index a847130..0000000 --- a/ReaderHive/Class/Novel/V/Reader/NRNovelReadMoreView.swift +++ /dev/null @@ -1,160 +0,0 @@ -// -// NRNovelReadMoreView.swift -// ReaderHive -// -// Created by 长沙鸿瑶 on 2025/11/28. -// - -import UIKit -import HWPanModal -import SnapKit - -class NRNovelReadMoreView: NRPanModalContentView { - - weak var viewModel: NRNovelReadViewModel? { - didSet { - let progress = CGFloat(viewModel?.currentPageIndexPath.section ?? 0) / CGFloat(viewModel?.chapterCatalogList.count ?? 0) - self.progressView.progress = progress - } - } - - lazy var catalogButton: UIButton = { - let button = self.createButton(title: "Catalog".localized, icon: UIImage(named: "catalog_icon_01")) - return button - }() - - lazy var nightButton: UIButton = { - let button = self.createButton(title: "Night".localized, icon: UIImage(named: "night_icon_01")) - return button - }() - - lazy var settingsButton: UIButton = { - let button = self.createButton(title: "Settings".localized, icon: UIImage(named: "settings_icon_01")) - button.addAction(UIAction(handler: { [weak self] _ in - guard let self = self else { return } - self.dismiss(animated: true) { } - - self.viewModel?.showSettingView() - }), for: .touchUpInside) - return button - }() - - lazy var stackView: UIStackView = { - let view = UIStackView(arrangedSubviews: [catalogButton, nightButton, settingsButton]) - view.axis = .horizontal - view.distribution = .equalSpacing - return view - }() - - lazy var prevLabel: UILabel = { - let label = UILabel() - label.font = .font(ofSize: 12, weight: .regular) - label.textColor = .black - label.text = "Prev".localized - label.setContentHuggingPriority(.required, for: .horizontal) - label.setContentCompressionResistancePriority(.required, for: .horizontal) - return label - }() - - lazy var nextLabel: UILabel = { - let label = UILabel() - label.font = .font(ofSize: 12, weight: .regular) - label.textColor = .black - label.text = "Next".localized - label.setContentHuggingPriority(.required, for: .horizontal) - label.setContentCompressionResistancePriority(.required, for: .horizontal) - return label - }() - - lazy var progressView: NRProgressView = { - let view = NRProgressView() - view.thumbImage = UIImage(named: "Progress-handle") - view.insets = .init(top: 6, left: 0, bottom: 6, right: 0) - view.panFinish = { [weak self] progress in - self?.progressView.progress = progress - let totalCount = self?.viewModel?.chapterCatalogList.count ?? 0 - let index = Int(floor(CGFloat(totalCount) * progress)) - self?.viewModel?.skip(chapterIndex: index) - } - return view - }() - - override init(frame: CGRect) { - super.init(frame: frame) - contentHeight = UIScreen.safeBottom + 105 - - backgroundColor = .white - - nr_setupUI() - } - - @MainActor required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func backgroundConfig() -> HWBackgroundConfig { - let config = HWBackgroundConfig() - config.backgroundAlpha = 0 - return config - } - - override func cornerRadius() -> CGFloat { - return 0 - } - - private func createButton(title: String, icon: UIImage?) -> UIButton { - var configuration = UIButton.Configuration.plain() - configuration.contentInsets = .zero - configuration.image = icon - configuration.imagePadding = 2 - configuration.imagePlacement = .top - configuration.attributedTitle = AttributedString(title, attributes: AttributeContainer([ - .font : UIFont.font(ofSize: 10, weight: .regular), - .foregroundColor : UIColor.black - ])) - - let button = UIButton(configuration: configuration) - button.snp.makeConstraints { make in - make.width.equalTo(72) - } - - return button - } - -} - -extension NRNovelReadMoreView { - - private func nr_setupUI() { - addSubview(stackView) - addSubview(progressView) - addSubview(prevLabel) - addSubview(nextLabel) - - stackView.snp.makeConstraints { make in - make.left.equalToSuperview().offset(28) - make.centerX.equalToSuperview() - make.top.equalToSuperview().offset(48) - make.height.equalTo(56) - } - - progressView.snp.makeConstraints { make in - make.top.equalToSuperview().offset(8) - make.centerX.equalToSuperview() - make.right.lessThanOrEqualTo(nextLabel.snp.left).offset(0) - make.left.greaterThanOrEqualTo(prevLabel.snp.right).offset(0) - } - - prevLabel.snp.makeConstraints { make in - make.centerY.equalTo(progressView) - make.left.equalToSuperview().offset(20) - } - - nextLabel.snp.makeConstraints { make in - make.centerY.equalTo(progressView) - make.right.equalToSuperview().offset(-20) - } - } - -} - diff --git a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift index eb7236a..5e61e8b 100644 --- a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift +++ b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift @@ -103,10 +103,13 @@ class NRNovelReaderViewController: NRViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - Task { - await NRLoginManager.manager.updateUserInfo() - } - + //防止自动锁屏 + UIApplication.shared.isIdleTimerDisabled = true + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + UIApplication.shared.isIdleTimerDisabled = false } override var prefersStatusBarHidden: Bool { @@ -190,39 +193,11 @@ extension NRNovelReaderViewController { guard !self.viewModel.chapterCatalogList.isEmpty else { return } - //读取历史记录 - let recordModel = self.viewModel.getReadRecord() - //匹配历史记录的索引 - var section = 0 - var row = 0 - if let catalogModel = self.targetCatalogModel { - for (index, model) in self.viewModel.chapterCatalogList.enumerated() { - if model.id == catalogModel.id { - section = index - break - } - } - if catalogModel.id == recordModel?.short_play_video_id { - row = recordModel?.page ?? 0 - } - self.targetCatalogModel = nil - } else { - if let recordModel = recordModel { - for (index, model) in self.viewModel.chapterCatalogList.enumerated() { - if model.id == recordModel.short_play_video_id { - section = index - break - } - } - if let page = recordModel.page { - row = page - } - } - } + let indexPath = self.indexPathToReadRecord() + let section = indexPath.section - - self.viewModel.currentPageIndexPath = IndexPath(row: row, section: section) + self.viewModel.currentPageIndexPath = indexPath let currentCatalogModel = self.viewModel.chapterCatalogList[section] @@ -236,4 +211,40 @@ extension NRNovelReaderViewController { } } + ///根据历史记录获取索引 + private func indexPathToReadRecord() -> IndexPath { + //读取历史记录 + let recordModel = self.viewModel.getReadRecord() + + //匹配历史记录的索引 + var section = 0 + var row = 0 + if let catalogModel = self.targetCatalogModel { + for (index, model) in self.viewModel.chapterCatalogList.enumerated() { + if model.id == catalogModel.id { + section = index + break + } + } + if catalogModel.id == recordModel?.short_play_video_id { + row = recordModel?.page ?? 0 + } + self.targetCatalogModel = nil + } else { + if let recordModel = recordModel { + for (index, model) in self.viewModel.chapterCatalogList.enumerated() { + if model.id == recordModel.short_play_video_id { + section = index + break + } + } + if let page = recordModel.page { + row = page + } + } + } + + return IndexPath(row: row, section: section) + } + } diff --git a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift index 0488d8d..81bca18 100644 --- a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift +++ b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift @@ -124,9 +124,6 @@ extension NRNovelReadViewModel { ///显示更多工具栏 func showMoreView() { -// let view = NRNovelReadMoreView() -// view.viewModel = self -// view.present(in: nil) guard let model = self.novelModel else { return } let view = NRNovelReadGradeView() diff --git a/ReaderHive/Libs/LocalizedManager/NRLocalizedManager.swift b/ReaderHive/Libs/LocalizedManager/NRLocalizedManager.swift index 07c036d..95936f1 100644 --- a/ReaderHive/Libs/LocalizedManager/NRLocalizedManager.swift +++ b/ReaderHive/Libs/LocalizedManager/NRLocalizedManager.swift @@ -45,6 +45,7 @@ class NRLocalizedManager: NSObject { // } // return key return "en" +// return "zh" } set { UserDefaults.standard.set(newValue, forKey: LocalizedUserDefaultsKey) diff --git a/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@2x.png b/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@2x.png index 41461de..902a755 100644 Binary files a/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@2x.png and b/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@2x.png differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@3x.png b/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@3x.png index 6241611..f7e24dd 100644 Binary files a/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@3x.png and b/ReaderHive/Source/Assets.xcassets/Image/bg_image_01.imageset/ Page@3x.png differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/Contents.json b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/Contents.json index 6d7fdfc..82221ec 100644 --- a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/Contents.json +++ b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/Contents.json @@ -5,12 +5,12 @@ "scale" : "1x" }, { - "filename" : "EverRead@2x.png", + "filename" : "单文字LOGO(ReaderHive)@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "EverRead@3x.png", + "filename" : "单文字LOGO(ReaderHive)@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@2x.png b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@2x.png deleted file mode 100644 index 4befc08..0000000 Binary files a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@2x.png and /dev/null differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@3x.png b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@3x.png deleted file mode 100644 index eb05da0..0000000 Binary files a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/EverRead@3x.png and /dev/null differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@2x.png b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@2x.png new file mode 100644 index 0000000..efff3c3 Binary files /dev/null and b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@2x.png differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@3x.png b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@3x.png new file mode 100644 index 0000000..d9e0f6c Binary files /dev/null and b/ReaderHive/Source/Assets.xcassets/Image/home_title_image.imageset/单文字LOGO(ReaderHive)@3x.png differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@2x.png b/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@2x.png index f938be5..bb81f8a 100644 Binary files a/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@2x.png and b/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@2x.png differ diff --git a/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@3x.png b/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@3x.png index 0fcf44a..f742d46 100644 Binary files a/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@3x.png and b/ReaderHive/Source/Assets.xcassets/Image/search_icon_01.imageset/Search Button@3x.png differ