1
This commit is contained in:
parent
f0628bd609
commit
e7b1017d50
@ -10,6 +10,12 @@
|
||||
B8B1DA3824F2148CEEF9F162 /* Pods_Fableon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4958FEE55B4555A94F11F00 /* Pods_Fableon.framework */; };
|
||||
F301F6472E974B6300E76A90 /* FARecommendPlayerControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F301F6462E974B6300E76A90 /* FARecommendPlayerControlView.swift */; };
|
||||
F34296922EA0C60200A58F99 /* FAHomePlayHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296912EA0C60200A58F99 /* FAHomePlayHistoryView.swift */; };
|
||||
F34296942EA0E8CB00A58F99 /* FAGenresViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296932EA0E8CB00A58F99 /* FAGenresViewController.swift */; };
|
||||
F34296972EA0EAAA00A58F99 /* FAGenresCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296952EA0EAAA00A58F99 /* FAGenresCell.swift */; };
|
||||
F34296982EA0EAAA00A58F99 /* FAGenresCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F34296962EA0EAAA00A58F99 /* FAGenresCell.xib */; };
|
||||
F342969A2EA0F8E700A58F99 /* FAGenresListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */; };
|
||||
F342969F2EA0FA2200A58F99 /* FAGenresListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */; };
|
||||
F34296A02EA0FA2200A58F99 /* FAGenresListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */; };
|
||||
F37103312E978F8C00E7F171 /* FACollectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37103302E978F8C00E7F171 /* FACollectViewController.swift */; };
|
||||
F37103352E97929F00E7F171 /* FACollectCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F37103342E97929F00E7F171 /* FACollectCell.xib */; };
|
||||
F37103362E97929F00E7F171 /* FACollectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37103332E97929F00E7F171 /* FACollectCell.swift */; };
|
||||
@ -129,6 +135,12 @@
|
||||
DC14083E24B746ED3DE2FE0C /* Pods-Fableon.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fableon.release.xcconfig"; path = "Target Support Files/Pods-Fableon/Pods-Fableon.release.xcconfig"; sourceTree = "<group>"; };
|
||||
F301F6462E974B6300E76A90 /* FARecommendPlayerControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARecommendPlayerControlView.swift; sourceTree = "<group>"; };
|
||||
F34296912EA0C60200A58F99 /* FAHomePlayHistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAHomePlayHistoryView.swift; sourceTree = "<group>"; };
|
||||
F34296932EA0E8CB00A58F99 /* FAGenresViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresViewController.swift; sourceTree = "<group>"; };
|
||||
F34296952EA0EAAA00A58F99 /* FAGenresCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresCell.swift; sourceTree = "<group>"; };
|
||||
F34296962EA0EAAA00A58F99 /* FAGenresCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAGenresCell.xib; sourceTree = "<group>"; };
|
||||
F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresListViewController.swift; sourceTree = "<group>"; };
|
||||
F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresListCell.swift; sourceTree = "<group>"; };
|
||||
F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAGenresListCell.xib; sourceTree = "<group>"; };
|
||||
F37103302E978F8C00E7F171 /* FACollectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACollectViewController.swift; sourceTree = "<group>"; };
|
||||
F37103332E97929F00E7F171 /* FACollectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACollectCell.swift; sourceTree = "<group>"; };
|
||||
F37103342E97929F00E7F171 /* FACollectCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FACollectCell.xib; sourceTree = "<group>"; };
|
||||
@ -559,6 +571,10 @@
|
||||
F37103642E9E3ABC00E7F171 /* FASearchResultCell.swift */,
|
||||
F37103652E9E3ABC00E7F171 /* FASearchResultCell.xib */,
|
||||
F34296912EA0C60200A58F99 /* FAHomePlayHistoryView.swift */,
|
||||
F34296952EA0EAAA00A58F99 /* FAGenresCell.swift */,
|
||||
F34296962EA0EAAA00A58F99 /* FAGenresCell.xib */,
|
||||
F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */,
|
||||
F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */,
|
||||
);
|
||||
path = V;
|
||||
sourceTree = "<group>";
|
||||
@ -568,6 +584,8 @@
|
||||
children = (
|
||||
F3A793032E77FB110097E0BC /* FAHomeViewController.swift */,
|
||||
F371034C2E9DF9FB00E7F171 /* FASearchViewController.swift */,
|
||||
F34296932EA0E8CB00A58F99 /* FAGenresViewController.swift */,
|
||||
F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */,
|
||||
);
|
||||
path = C;
|
||||
sourceTree = "<group>";
|
||||
@ -828,8 +846,10 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F34296982EA0EAAA00A58F99 /* FAGenresCell.xib in Resources */,
|
||||
F3A798B72E828C180097E0BC /* Localizable.strings in Resources */,
|
||||
F37103572E9E1FA500E7F171 /* FASearchRecordCell.xib in Resources */,
|
||||
F342969F2EA0FA2200A58F99 /* FAGenresListCell.xib in Resources */,
|
||||
F39E663A2E77BAD0008AAAFA /* Assets.xcassets in Resources */,
|
||||
F37103772E9FA15B00E7F171 /* FAAboutCell.xib in Resources */,
|
||||
F371035E2E9E2E7400E7F171 /* FASearchRecommendCell.xib in Resources */,
|
||||
@ -917,6 +937,7 @@
|
||||
F3A7931C2E792D0D0097E0BC /* FAHomeMustSeeContentCell.swift in Sources */,
|
||||
F37103612E9E379E00E7F171 /* FASearchResultView.swift in Sources */,
|
||||
F3A792F52E77F8A80097E0BC /* FAHomeRecommendedItemView.swift in Sources */,
|
||||
F34296972EA0EAAA00A58F99 /* FAGenresCell.swift in Sources */,
|
||||
F37103842EA0873B00E7F171 /* Dictionary+FAAdd.swift in Sources */,
|
||||
F3A792F72E77F8A80097E0BC /* FAHomeNewView.swift in Sources */,
|
||||
F3A792F82E77F8A80097E0BC /* FAHomeMustSeeShortView.swift in Sources */,
|
||||
@ -944,8 +965,10 @@
|
||||
F3A7932C2E796EF80097E0BC /* FAPlayerDetailControlView.swift in Sources */,
|
||||
F3A798BC2E82AB6F0097E0BC /* FAEpSelectorView.swift in Sources */,
|
||||
F37103512E9E1D7800E7F171 /* FASearchHomeView.swift in Sources */,
|
||||
F34296942EA0E8CB00A58F99 /* FAGenresViewController.swift in Sources */,
|
||||
F3A792AF2E77DFB90097E0BC /* FATokenModel.swift in Sources */,
|
||||
F38C25FA2E86A217008C22C3 /* UIView+FAAdd.swift in Sources */,
|
||||
F342969A2EA0F8E700A58F99 /* FAGenresListViewController.swift in Sources */,
|
||||
F3A7931A2E7911420097E0BC /* FAPagerViewTransformer.swift in Sources */,
|
||||
F3DCC0672E8AA14A00D58007 /* FAMeItemModel.swift in Sources */,
|
||||
F37103312E978F8C00E7F171 /* FACollectViewController.swift in Sources */,
|
||||
@ -966,6 +989,7 @@
|
||||
F3A792DC2E77F70C0097E0BC /* FAPlayerDetailViewController.swift in Sources */,
|
||||
F38C25FF2E86B663008C22C3 /* AppDelegate+FAConfig.swift in Sources */,
|
||||
F37103592E9E281C00E7F171 /* FASearchRecommendView.swift in Sources */,
|
||||
F34296A02EA0FA2200A58F99 /* FAGenresListCell.swift in Sources */,
|
||||
F3A792BF2E77E4B80097E0BC /* FATool.swift in Sources */,
|
||||
F371033F2E97BDF800E7F171 /* FAHistoryViewController.swift in Sources */,
|
||||
F3DCC08B2E8BB16F00D58007 /* FARecommendViewController.swift in Sources */,
|
||||
|
||||
@ -10,7 +10,7 @@ let FAWebBaseURL = "https://www.breeltv.com"
|
||||
let FACampaignWebURL = "https://campaign.breeltv.com"
|
||||
|
||||
|
||||
|
||||
//hbqinjiu.com
|
||||
|
||||
///反馈首页
|
||||
let kFAFeedBackHomeWebUrl = FACampaignWebURL + "/pages/leave/index"
|
||||
|
||||
74
Fableon/Class/Home/C/FAGenresListViewController.swift
Normal file
74
Fableon/Class/Home/C/FAGenresListViewController.swift
Normal file
@ -0,0 +1,74 @@
|
||||
//
|
||||
// FAGenresListViewController.swift
|
||||
// Fableon
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/10/16.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class FAGenresListViewController: FAViewController {
|
||||
|
||||
|
||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||
let width = floor((UIScreen.width - 32 - 16) / 3)
|
||||
let height = 145 / 109 * width + 41
|
||||
|
||||
let layout = UICollectionViewFlowLayout()
|
||||
layout.minimumLineSpacing = 12
|
||||
layout.minimumInteritemSpacing = 8
|
||||
layout.itemSize = .init(width: width, height: height)
|
||||
layout.sectionInset = .init(top: 0, left: 16, bottom: 0, right: 16)
|
||||
return layout
|
||||
}()
|
||||
|
||||
private lazy var collectionView: FACollectionView = {
|
||||
let collectionView = FACollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
|
||||
collectionView.delegate = self
|
||||
collectionView.dataSource = self
|
||||
collectionView.contentInset = .init(top: 20, left: 0, bottom: UIScreen.safeBottom + 10, right: 0)
|
||||
collectionView.register(UINib(nibName: "FAGenresListCell", bundle: nil), forCellWithReuseIdentifier: "cell")
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
fa_setupLayout()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.navigationController?.setNavigationBarHidden(false, animated: true)
|
||||
fa_setNavigationStyle()
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
extension FAGenresListViewController {
|
||||
|
||||
private func fa_setupLayout() {
|
||||
view.addSubview(collectionView)
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(UIScreen.navBarHeight)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//MARK: UICollectionViewDelegate UICollectionViewDataSource
|
||||
extension FAGenresListViewController: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
return 10
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresListCell
|
||||
return cell
|
||||
}
|
||||
}
|
||||
83
Fableon/Class/Home/C/FAGenresViewController.swift
Normal file
83
Fableon/Class/Home/C/FAGenresViewController.swift
Normal file
@ -0,0 +1,83 @@
|
||||
//
|
||||
// FAGenresViewController.swift
|
||||
// Fableon
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/10/16.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class FAGenresViewController: FAViewController {
|
||||
|
||||
|
||||
private lazy var bgColorArr: [UIColor] = [
|
||||
._5_CA_8_FF_0_5,
|
||||
.A_783_FF_0_5,
|
||||
.FF_5977_0_5,
|
||||
.FE_8_CCA_0_5,
|
||||
.FCB_072_0_5
|
||||
]
|
||||
|
||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||
let layout = UICollectionViewFlowLayout()
|
||||
layout.minimumLineSpacing = 10
|
||||
layout.itemSize = .init(width: UIScreen.width - 32, height: 140)
|
||||
return layout
|
||||
}()
|
||||
|
||||
private lazy var collectionView: FACollectionView = {
|
||||
let collectionView = FACollectionView(frame: .zero, collectionViewLayout: self.collectionViewLayout)
|
||||
collectionView.delegate = self
|
||||
collectionView.dataSource = self
|
||||
collectionView.contentInset = .init(top: 24, left: 0, bottom: UIScreen.safeBottom + 10, right: 0)
|
||||
collectionView.register(UINib(nibName: "FAGenresCell", bundle: nil), forCellWithReuseIdentifier: "cell")
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
self.title = "Genres".localized
|
||||
|
||||
fa_setupLayout()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.navigationController?.setNavigationBarHidden(false, animated: true)
|
||||
self.fa_setNavigationStyle()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension FAGenresViewController {
|
||||
|
||||
private func fa_setupLayout() {
|
||||
view.addSubview(collectionView)
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(UIScreen.navBarHeight)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//MARK: UICollectionViewDelegate UICollectionViewDataSource
|
||||
extension FAGenresViewController: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresCell
|
||||
cell.bgView.backgroundColor = bgColorArr[indexPath.row % 5]
|
||||
return cell
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
return 10
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||
let vc = FAGenresListViewController()
|
||||
self.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
|
||||
}
|
||||
@ -11,6 +11,8 @@ struct FAHomeMustSeeContentView: View {
|
||||
|
||||
@Binding var list: [FAShortPlayModel]
|
||||
|
||||
var moduleKey: FAHomeModuleItem.ModuleKey?
|
||||
|
||||
@ObservedObject var viewModel: FAHomeViewModel
|
||||
|
||||
|
||||
@ -23,6 +25,12 @@ struct FAHomeMustSeeContentView: View {
|
||||
.padding(.leading, 10)
|
||||
.padding(.top, 12)
|
||||
Spacer()
|
||||
// Image("Frame 3013")
|
||||
// .padding(.top, 14)
|
||||
// .padding(.trailing, 10)
|
||||
// .onTapGesture {
|
||||
// self.viewModel.pushMustSee(moduleKey)
|
||||
// }
|
||||
}
|
||||
|
||||
VStack(spacing: 11) {
|
||||
|
||||
@ -86,7 +86,9 @@ struct FAHomeMustSeeView: View {
|
||||
}
|
||||
|
||||
private func contentView(index: Int) -> some View {
|
||||
return FAHomeMustSeeContentView(list: $viewModel.mustSeeArr[index].list, viewModel: self.viewModel)
|
||||
return FAHomeMustSeeContentView(list: $viewModel.mustSeeArr[index].list,
|
||||
moduleKey: viewModel.mustSeeArr[index].module_key,
|
||||
viewModel: self.viewModel)
|
||||
.padding(.trailing, 16)
|
||||
}
|
||||
}
|
||||
|
||||
53
Fableon/Class/Home/V/FAGenresCell.swift
Normal file
53
Fableon/Class/Home/V/FAGenresCell.swift
Normal file
@ -0,0 +1,53 @@
|
||||
//
|
||||
// FAGenresCell.swift
|
||||
// Fableon
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/10/16.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class FAGenresCell: UICollectionViewCell {
|
||||
|
||||
|
||||
@IBOutlet weak var bgView: UIView!
|
||||
|
||||
@IBOutlet weak var coverImageView: FAImageView!
|
||||
|
||||
@IBOutlet weak var nameLabel: UILabel!
|
||||
|
||||
@IBOutlet weak var hotCountLabel: UILabel!
|
||||
|
||||
private lazy var smallImageViewArr: [UIView] = []
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
coverImageView.layer.borderWidth = 3
|
||||
coverImageView.layer.borderColor = UIColor.FFFFFF.cgColor
|
||||
|
||||
|
||||
for i in 0..<4 {
|
||||
let imageView = createSmallCoverImageView()
|
||||
contentView.addSubview(imageView)
|
||||
|
||||
imageView.snp.makeConstraints { make in
|
||||
make.bottom.equalToSuperview()
|
||||
make.width.height.equalTo(34)
|
||||
make.right.equalToSuperview().offset(-(24 + i * 23))
|
||||
}
|
||||
|
||||
smallImageViewArr.append(imageView)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func createSmallCoverImageView() -> UIImageView {
|
||||
let imageView = FAImageView()
|
||||
imageView.layer.cornerRadius = 17
|
||||
imageView.layer.masksToBounds = true
|
||||
imageView.layer.borderWidth = 1
|
||||
imageView.layer.borderColor = UIColor.CEE_2_F_5.cgColor
|
||||
return imageView
|
||||
}
|
||||
|
||||
}
|
||||
104
Fableon/Class/Home/V/FAGenresCell.xib
Normal file
104
Fableon/Class/Home/V/FAGenresCell.xib
Normal file
@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="FAGenresCell" customModule="Fableon" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="413" height="153"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="413" height="153"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="T3X-Bw-MIB">
|
||||
<rect key="frame" x="0.0" y="40" width="413" height="106"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LbS-0P-tAf">
|
||||
<rect key="frame" x="152" y="15" width="50" height="24"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="20"/>
|
||||
<color key="textColor" name="#FFFFFF"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Frame 3014" translatesAutoresizingMaskIntoConstraints="NO" id="hqB-yr-uhy">
|
||||
<rect key="frame" x="372" y="19" width="16" height="16"/>
|
||||
</imageView>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_火" translatesAutoresizingMaskIntoConstraints="NO" id="dr5-yQ-gX9">
|
||||
<rect key="frame" x="152" y="48" width="9" height="9.3333333333333357"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JZp-LI-PlL">
|
||||
<rect key="frame" x="162" y="46.666666666666671" width="27" height="12"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="10"/>
|
||||
<color key="textColor" name="#FFFFFF"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="#5CA8FF_0.5"/>
|
||||
<constraints>
|
||||
<constraint firstItem="LbS-0P-tAf" firstAttribute="leading" secondItem="T3X-Bw-MIB" secondAttribute="leading" constant="152" id="Nrm-d1-SY5"/>
|
||||
<constraint firstItem="dr5-yQ-gX9" firstAttribute="top" secondItem="LbS-0P-tAf" secondAttribute="bottom" constant="9" id="PFQ-Cy-rgv"/>
|
||||
<constraint firstItem="JZp-LI-PlL" firstAttribute="centerY" secondItem="dr5-yQ-gX9" secondAttribute="centerY" id="Rx2-sn-DTb"/>
|
||||
<constraint firstItem="dr5-yQ-gX9" firstAttribute="leading" secondItem="LbS-0P-tAf" secondAttribute="leading" id="i4k-zs-CdI"/>
|
||||
<constraint firstItem="JZp-LI-PlL" firstAttribute="leading" secondItem="dr5-yQ-gX9" secondAttribute="trailing" constant="1" id="jH5-jE-fIE"/>
|
||||
<constraint firstItem="hqB-yr-uhy" firstAttribute="centerY" secondItem="LbS-0P-tAf" secondAttribute="centerY" id="llL-b1-yDx"/>
|
||||
<constraint firstAttribute="trailing" secondItem="hqB-yr-uhy" secondAttribute="trailing" constant="25" id="p5x-Kl-yiW"/>
|
||||
<constraint firstItem="LbS-0P-tAf" firstAttribute="top" secondItem="T3X-Bw-MIB" secondAttribute="top" constant="15" id="ty5-31-WUP"/>
|
||||
<constraint firstAttribute="height" constant="106" id="zSV-U3-XZ2"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="13"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="wHQ-zC-Ekt" customClass="FAImageView" customModule="Fableon" customModuleProvider="target">
|
||||
<rect key="frame" x="25" y="0.0" width="96" height="125"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="96" id="BEO-gx-JNt"/>
|
||||
<constraint firstAttribute="height" constant="125" id="nwn-Av-SSD"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="10"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
</subviews>
|
||||
</view>
|
||||
<viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
|
||||
<constraints>
|
||||
<constraint firstItem="wHQ-zC-Ekt" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="1tb-bS-p63"/>
|
||||
<constraint firstItem="wHQ-zC-Ekt" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="25" id="9H9-bt-Bez"/>
|
||||
<constraint firstAttribute="bottom" secondItem="T3X-Bw-MIB" secondAttribute="bottom" constant="7" id="Ckw-RZ-eod"/>
|
||||
<constraint firstItem="T3X-Bw-MIB" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="X3G-8K-Lge"/>
|
||||
<constraint firstAttribute="trailing" secondItem="T3X-Bw-MIB" secondAttribute="trailing" id="ZIq-Pi-rAC"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="413" height="153"/>
|
||||
<connections>
|
||||
<outlet property="bgView" destination="T3X-Bw-MIB" id="6LA-r0-Pm1"/>
|
||||
<outlet property="coverImageView" destination="wHQ-zC-Ekt" id="5oi-3V-uYl"/>
|
||||
<outlet property="hotCountLabel" destination="JZp-LI-PlL" id="qPk-3g-2vp"/>
|
||||
<outlet property="nameLabel" destination="LbS-0P-tAf" id="MiT-7A-RUM"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="416.03053435114504" y="77.112676056338032"/>
|
||||
</collectionViewCell>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="Frame 3014" width="16" height="16"/>
|
||||
<image name="icon_火" width="9" height="9.3333330154418945"/>
|
||||
<namedColor name="#5CA8FF_0.5">
|
||||
<color red="0.36078431372549019" green="0.6588235294117647" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
<namedColor name="#FFFFFF">
|
||||
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
</resources>
|
||||
</document>
|
||||
17
Fableon/Class/Home/V/FAGenresListCell.swift
Normal file
17
Fableon/Class/Home/V/FAGenresListCell.swift
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// FAGenresListCell.swift
|
||||
// Fableon
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/10/16.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class FAGenresListCell: UICollectionViewCell {
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
// Initialization code
|
||||
}
|
||||
|
||||
}
|
||||
56
Fableon/Class/Home/V/FAGenresListCell.xib
Normal file
56
Fableon/Class/Home/V/FAGenresListCell.xib
Normal file
@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="FAGenresListCell" customModule="Fableon" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="229" height="312"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="229" height="312"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="utm-U3-G8N" customClass="FAImageView" customModule="Fableon" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="229" height="271"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="6"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Si-zr-lN5">
|
||||
<rect key="frame" x="0.0" y="278" width="31" height="14.333333333333314"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||
<color key="textColor" name="#FFFFFF"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</view>
|
||||
<viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
|
||||
<constraints>
|
||||
<constraint firstItem="utm-U3-G8N" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="98u-Kk-pCp"/>
|
||||
<constraint firstItem="utm-U3-G8N" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="PB0-C5-REN"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="7Si-zr-lN5" secondAttribute="trailing" id="a09-yq-Qk2"/>
|
||||
<constraint firstAttribute="trailing" secondItem="utm-U3-G8N" secondAttribute="trailing" id="hye-Zu-8CL"/>
|
||||
<constraint firstItem="7Si-zr-lN5" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="jdV-h0-WJe"/>
|
||||
<constraint firstAttribute="bottom" secondItem="utm-U3-G8N" secondAttribute="bottom" constant="41" id="rdd-F2-IN5"/>
|
||||
<constraint firstItem="7Si-zr-lN5" firstAttribute="top" secondItem="utm-U3-G8N" secondAttribute="bottom" constant="7" id="z5d-BM-XIT"/>
|
||||
</constraints>
|
||||
<size key="customSize" width="229" height="312"/>
|
||||
<point key="canvasLocation" x="275.57251908396944" y="133.80281690140845"/>
|
||||
</collectionViewCell>
|
||||
</objects>
|
||||
<resources>
|
||||
<namedColor name="#FFFFFF">
|
||||
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
</resources>
|
||||
</document>
|
||||
@ -125,4 +125,10 @@ extension FAHomeViewModel {
|
||||
FATool.topViewController?.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
|
||||
func pushMustSee(_ key: FAHomeModuleItem.ModuleKey?) {
|
||||
debugLog("\(key?.rawValue)")
|
||||
|
||||
let vc = FAGenresViewController()
|
||||
FATool.topViewController?.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xA8",
|
||||
"red" : "0x5C"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0x83",
|
||||
"red" : "0xA7"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF5",
|
||||
"green" : "0xE2",
|
||||
"red" : "0xCE"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0x72",
|
||||
"green" : "0xB0",
|
||||
"red" : "0xFC"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0xCA",
|
||||
"green" : "0x8C",
|
||||
"red" : "0xFE"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0x77",
|
||||
"green" : "0x59",
|
||||
"red" : "0xFF"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
22
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Contents.json
vendored
Normal file
22
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 3012@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 3012@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Frame 3012@2x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Frame 3012@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 286 B |
BIN
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Frame 3012@3x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/Frame 3013.imageset/Frame 3012@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 374 B |
22
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Contents.json
vendored
Normal file
22
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 3013@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 3013@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Frame 3013@2x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Frame 3013@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 256 B |
BIN
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Frame 3013@3x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/Frame 3014.imageset/Frame 3013@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 316 B |
22
Fableon/Source/Assets.xcassets/image/icon_火.imageset/Contents.json
vendored
Normal file
22
Fableon/Source/Assets.xcassets/image/icon_火.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "icon_火@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "icon_火@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Fableon/Source/Assets.xcassets/image/icon_火.imageset/icon_火@2x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/icon_火.imageset/icon_火@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 324 B |
BIN
Fableon/Source/Assets.xcassets/image/icon_火.imageset/icon_火@3x.png
vendored
Normal file
BIN
Fableon/Source/Assets.xcassets/image/icon_火.imageset/icon_火@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 442 B |
@ -17,3 +17,4 @@
|
||||
"Setting" = "Setting";
|
||||
"Settings" = "Settings";
|
||||
"Last Watch:Ep.##" = "Last Watch:Ep.##";
|
||||
"Genres" = "Genres";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user