1.0
@ -152,6 +152,9 @@
|
|||||||
BFC676B92E1385FC006659E5 /* BRPopularPicksSmallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676B82E1385FC006659E5 /* BRPopularPicksSmallCell.swift */; };
|
BFC676B92E1385FC006659E5 /* BRPopularPicksSmallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676B82E1385FC006659E5 /* BRPopularPicksSmallCell.swift */; };
|
||||||
BFC676BC2E138ABB006659E5 /* BRNewReleasesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BB2E138ABB006659E5 /* BRNewReleasesViewController.swift */; };
|
BFC676BC2E138ABB006659E5 /* BRNewReleasesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BB2E138ABB006659E5 /* BRNewReleasesViewController.swift */; };
|
||||||
BFC676BE2E13A8EB006659E5 /* UIScrollView+BRRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */; };
|
BFC676BE2E13A8EB006659E5 /* UIScrollView+BRRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */; };
|
||||||
|
F39855202E32166300E2D28D /* BRFavoritesPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398551F2E32166300E2D28D /* BRFavoritesPageViewController.swift */; };
|
||||||
|
F39855222E32227D00E2D28D /* BRPlayHistorysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855212E32227D00E2D28D /* BRPlayHistorysViewController.swift */; };
|
||||||
|
F39855242E3222BE00E2D28D /* BRPlayHistorysCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855232E3222BE00E2D28D /* BRPlayHistorysCell.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
@ -315,6 +318,9 @@
|
|||||||
BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScrollView+BRRefresh.swift"; sourceTree = "<group>"; };
|
BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScrollView+BRRefresh.swift"; sourceTree = "<group>"; };
|
||||||
C8F11086BA392585E9563BA7 /* Pods-ShortBox.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShortBox.release.xcconfig"; path = "Target Support Files/Pods-ShortBox/Pods-ShortBox.release.xcconfig"; sourceTree = "<group>"; };
|
C8F11086BA392585E9563BA7 /* Pods-ShortBox.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShortBox.release.xcconfig"; path = "Target Support Files/Pods-ShortBox/Pods-ShortBox.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
F06627B1DEE86552C2A87AEC /* Pods-BeeReel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.debug.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.debug.xcconfig"; sourceTree = "<group>"; };
|
F06627B1DEE86552C2A87AEC /* Pods-BeeReel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.debug.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
F398551F2E32166300E2D28D /* BRFavoritesPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRFavoritesPageViewController.swift; sourceTree = "<group>"; };
|
||||||
|
F39855212E32227D00E2D28D /* BRPlayHistorysViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPlayHistorysViewController.swift; sourceTree = "<group>"; };
|
||||||
|
F39855232E3222BE00E2D28D /* BRPlayHistorysCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPlayHistorysCell.swift; sourceTree = "<group>"; };
|
||||||
F70FA1F4169364C4C53534CE /* Pods-BeeReel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.release.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.release.xcconfig"; sourceTree = "<group>"; };
|
F70FA1F4169364C4C53534CE /* Pods-BeeReel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.release.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@ -363,7 +369,9 @@
|
|||||||
BF02B8062E2F613600172177 /* Controller */ = {
|
BF02B8062E2F613600172177 /* Controller */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F398551F2E32166300E2D28D /* BRFavoritesPageViewController.swift */,
|
||||||
BF02B8072E2F616E00172177 /* BRFavoritesViewController.swift */,
|
BF02B8072E2F616E00172177 /* BRFavoritesViewController.swift */,
|
||||||
|
F39855212E32227D00E2D28D /* BRPlayHistorysViewController.swift */,
|
||||||
);
|
);
|
||||||
path = Controller;
|
path = Controller;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -371,8 +379,9 @@
|
|||||||
BF02B80B2E2F63C600172177 /* View */ = {
|
BF02B80B2E2F63C600172177 /* View */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
BF02B80C2E2F63ED00172177 /* BRFavoritesCell.swift */,
|
|
||||||
BF02B80E2E2F6EEA00172177 /* BRFavoritesHeaderView.swift */,
|
BF02B80E2E2F6EEA00172177 /* BRFavoritesHeaderView.swift */,
|
||||||
|
BF02B80C2E2F63ED00172177 /* BRFavoritesCell.swift */,
|
||||||
|
F39855232E3222BE00E2D28D /* BRPlayHistorysCell.swift */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1147,6 +1156,7 @@
|
|||||||
BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */,
|
BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */,
|
||||||
BF3338EA2E152B8100B10F76 /* BRPlayerCache.swift in Sources */,
|
BF3338EA2E152B8100B10F76 /* BRPlayerCache.swift in Sources */,
|
||||||
BF3A56832E30C561009E5CF9 /* BRSearchResultView.swift in Sources */,
|
BF3A56832E30C561009E5CF9 /* BRSearchResultView.swift in Sources */,
|
||||||
|
F39855242E3222BE00E2D28D /* BRPlayHistorysCell.swift in Sources */,
|
||||||
BFC676952E126BBF006659E5 /* BRSpotlightNewCell.swift in Sources */,
|
BFC676952E126BBF006659E5 /* BRSpotlightNewCell.swift in Sources */,
|
||||||
BF692B402E0A8FA100A5C2DA /* UIColor+BRAdd.swift in Sources */,
|
BF692B402E0A8FA100A5C2DA /* UIColor+BRAdd.swift in Sources */,
|
||||||
BF692B102E0A7B4300A5C2DA /* BRUserDefaultsKey.swift in Sources */,
|
BF692B102E0A7B4300A5C2DA /* BRUserDefaultsKey.swift in Sources */,
|
||||||
@ -1180,6 +1190,7 @@
|
|||||||
BF3338FD2E1626B000B10F76 /* BRPlayerControlProtocol.swift in Sources */,
|
BF3338FD2E1626B000B10F76 /* BRPlayerControlProtocol.swift in Sources */,
|
||||||
BF692B582E0AAA6F00A5C2DA /* UIScreen+BRAdd.swift in Sources */,
|
BF692B582E0AAA6F00A5C2DA /* UIScreen+BRAdd.swift in Sources */,
|
||||||
BF692B1F2E0A804600A5C2DA /* BRLocalizedManager.swift in Sources */,
|
BF692B1F2E0A804600A5C2DA /* BRLocalizedManager.swift in Sources */,
|
||||||
|
F39855222E32227D00E2D28D /* BRPlayHistorysViewController.swift in Sources */,
|
||||||
BF02B7E92E2E29E900172177 /* BREpisodeSelectorCell.swift in Sources */,
|
BF02B7E92E2E29E900172177 /* BREpisodeSelectorCell.swift in Sources */,
|
||||||
BF02B83B2E30BB4C00172177 /* BRHotSearchView.swift in Sources */,
|
BF02B83B2E30BB4C00172177 /* BRHotSearchView.swift in Sources */,
|
||||||
BF02B8332E308E4300172177 /* BRSearchRecordTagCell.swift in Sources */,
|
BF02B8332E308E4300172177 /* BRSearchRecordTagCell.swift in Sources */,
|
||||||
@ -1198,6 +1209,7 @@
|
|||||||
BF02B8022E2F39FE00172177 /* BRCategorieShortViewController.swift in Sources */,
|
BF02B8022E2F39FE00172177 /* BRCategorieShortViewController.swift in Sources */,
|
||||||
BF3338FB2E161CF900B10F76 /* NSNumber+BRAdd.swift in Sources */,
|
BF3338FB2E161CF900B10F76 /* NSNumber+BRAdd.swift in Sources */,
|
||||||
BF692B222E0A820D00A5C2DA /* String+BRAdd.swift in Sources */,
|
BF692B222E0A820D00A5C2DA /* String+BRAdd.swift in Sources */,
|
||||||
|
F39855202E32166300E2D28D /* BRFavoritesPageViewController.swift in Sources */,
|
||||||
BF02B80F2E2F6EEA00172177 /* BRFavoritesHeaderView.swift in Sources */,
|
BF02B80F2E2F6EEA00172177 /* BRFavoritesHeaderView.swift in Sources */,
|
||||||
BF692B632E0B9D4800A5C2DA /* BRTabBarItem.swift in Sources */,
|
BF692B632E0B9D4800A5C2DA /* BRTabBarItem.swift in Sources */,
|
||||||
BFC6768B2E123690006659E5 /* BRVideoRevolutionManager.swift in Sources */,
|
BFC6768B2E123690006659E5 /* BRVideoRevolutionManager.swift in Sources */,
|
||||||
@ -1268,6 +1280,7 @@
|
|||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = BeeReel/Sources/Info.plist;
|
INFOPLIST_FILE = BeeReel/Sources/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = BeeReel;
|
INFOPLIST_KEY_CFBundleDisplayName = BeeReel;
|
||||||
|
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
INFOPLIST_KEY_UIMainStoryboardFile = "";
|
INFOPLIST_KEY_UIMainStoryboardFile = "";
|
||||||
@ -1303,6 +1316,7 @@
|
|||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = BeeReel/Sources/Info.plist;
|
INFOPLIST_FILE = BeeReel/Sources/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = BeeReel;
|
INFOPLIST_KEY_CFBundleDisplayName = BeeReel;
|
||||||
|
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
|
||||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
INFOPLIST_KEY_UIMainStoryboardFile = "";
|
INFOPLIST_KEY_UIMainStoryboardFile = "";
|
||||||
|
@ -72,7 +72,7 @@ extension BRTabBarController {
|
|||||||
private func br_setup() {
|
private func br_setup() {
|
||||||
let nav1 = createNavigationController(viewController: BRHomeViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_01"), selectedImage: UIImage(named: "tabbar_icon_01_selected"))
|
let nav1 = createNavigationController(viewController: BRHomeViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_01"), selectedImage: UIImage(named: "tabbar_icon_01_selected"))
|
||||||
let nav2 = createNavigationController(viewController: BRExploreViewController(), title: "推荐".localized, image: UIImage(named: "tabbar_icon_02"), selectedImage: UIImage(named: "tabbar_icon_02_selected"))
|
let nav2 = createNavigationController(viewController: BRExploreViewController(), title: "推荐".localized, image: UIImage(named: "tabbar_icon_02"), selectedImage: UIImage(named: "tabbar_icon_02_selected"))
|
||||||
let nav3 = createNavigationController(viewController: BRFavoritesViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_03"), selectedImage: UIImage(named: "tabbar_icon_03_selected"))
|
let nav3 = createNavigationController(viewController: BRFavoritesPageViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_03"), selectedImage: UIImage(named: "tabbar_icon_03_selected"))
|
||||||
let nav4 = createNavigationController(viewController: BRMineViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
|
let nav4 = createNavigationController(viewController: BRMineViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
|
||||||
|
|
||||||
viewControllers = [nav1, nav2, nav3, nav4]
|
viewControllers = [nav1, nav2, nav3, nav4]
|
||||||
|
@ -0,0 +1,81 @@
|
|||||||
|
//
|
||||||
|
// BRFavoritesPageViewController.swift
|
||||||
|
// BeeReel
|
||||||
|
//
|
||||||
|
// Created by 长沙鸿瑶 on 2025/7/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import WMZPageController
|
||||||
|
|
||||||
|
class BRFavoritesPageViewController: BRViewController {
|
||||||
|
|
||||||
|
private lazy var vcArr: [BRViewController] = {
|
||||||
|
let arr = [
|
||||||
|
BRFavoritesViewController(),
|
||||||
|
BRPlayHistorysViewController(),
|
||||||
|
]
|
||||||
|
return arr
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var pageParam: WMZPageParam = {
|
||||||
|
let param = WMZPageParam()
|
||||||
|
param.wTitleArr = [
|
||||||
|
[WMZPageBTNKey.keyImage : "Favorites 1", WMZPageBTNKey.keySelectImage : "Favorites", WMZPageBTNKey.keyTitleWidth : UIImage(named: "Favorites")?.size.width ?? 0],
|
||||||
|
[WMZPageBTNKey.keyImage : "history 1", WMZPageBTNKey.keySelectImage : "history", WMZPageBTNKey.keyTitleWidth : UIImage(named: "history")?.size.width ?? 0],
|
||||||
|
]
|
||||||
|
param.wViewController = { [weak self] index in
|
||||||
|
return self?.vcArr[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
//顶部可下拉
|
||||||
|
param.wBounces = false
|
||||||
|
|
||||||
|
param.wMenuHeight = 25
|
||||||
|
param.wMenuTitleOffset = 20
|
||||||
|
param.wMenuInsets = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
|
||||||
|
param.wMenuBgColor = .clear
|
||||||
|
param.wBgColor = .clear
|
||||||
|
|
||||||
|
|
||||||
|
param.wCustomNaviBarY = { _ in
|
||||||
|
return UIScreen.statusBarHeight + 18
|
||||||
|
}
|
||||||
|
param.wCustomTabbarY = { _ in
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return param
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var pageView: WMZPageView = {
|
||||||
|
let view = WMZPageView(frame: self.view.bounds, autoFix: true, param: pageParam, parentReponder: self)
|
||||||
|
view.backgroundColor = .clear
|
||||||
|
view.downSc?.backgroundColor = .clear
|
||||||
|
return view
|
||||||
|
}()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
self.navigationController?.isNavigationBarHidden = true
|
||||||
|
|
||||||
|
br_setupUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
self.navigationController?.setNavigationBarHidden(true, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension BRFavoritesPageViewController {
|
||||||
|
|
||||||
|
private func br_setupUI() {
|
||||||
|
view.addSubview(pageView)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -12,23 +12,6 @@ class BRFavoritesViewController: BRViewController {
|
|||||||
private lazy var listArr: [BRShortModel] = []
|
private lazy var listArr: [BRShortModel] = []
|
||||||
private lazy var page = 1
|
private lazy var page = 1
|
||||||
|
|
||||||
///播放历史
|
|
||||||
private var playHistoryModel: BRShortModel? {
|
|
||||||
didSet {
|
|
||||||
if let _ = playHistoryModel {
|
|
||||||
self.collectionViewLayout.headerReferenceSize = .init(width: UIScreen.width, height: 180)
|
|
||||||
} else {
|
|
||||||
self.collectionViewLayout.headerReferenceSize = .zero
|
|
||||||
}
|
|
||||||
|
|
||||||
collectionView.reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private lazy var titleImageView: UIImageView = {
|
|
||||||
let imageView = UIImageView(image: UIImage(named: "title_icon_01"))
|
|
||||||
return imageView
|
|
||||||
}()
|
|
||||||
|
|
||||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||||
let width = floor((UIScreen.width - 30 - 22) / 3)
|
let width = floor((UIScreen.width - 30 - 22) / 3)
|
||||||
@ -79,23 +62,10 @@ class BRFavoritesViewController: BRViewController {
|
|||||||
|
|
||||||
requestDataList(page: 1, completer: nil)
|
requestDataList(page: 1, completer: nil)
|
||||||
|
|
||||||
requestPlayHistorys()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewWillAppear(_ animated: Bool) {
|
|
||||||
super.viewWillAppear(animated)
|
|
||||||
self.navigationController?.setNavigationBarHidden(true, animated: true)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
|
||||||
if self.hasViewDidAppear {
|
|
||||||
requestPlayHistorys()
|
|
||||||
}
|
|
||||||
super.viewDidAppear(animated)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func handleHeaderRefresh(_ completer: (() -> Void)?) {
|
override func handleHeaderRefresh(_ completer: (() -> Void)?) {
|
||||||
self.requestPlayHistorys()
|
|
||||||
self.requestDataList(page: 1) { [weak self] in
|
self.requestDataList(page: 1) { [weak self] in
|
||||||
self?.collectionView.br_endHeaderRefreshing()
|
self?.collectionView.br_endHeaderRefreshing()
|
||||||
}
|
}
|
||||||
@ -108,7 +78,7 @@ class BRFavoritesViewController: BRViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updateEmptyStatus() {
|
private func updateEmptyStatus() {
|
||||||
if listArr.isEmpty, self.playHistoryModel == nil {
|
if listArr.isEmpty {
|
||||||
self.collectionView.ly_showEmpty()
|
self.collectionView.ly_showEmpty()
|
||||||
} else {
|
} else {
|
||||||
self.collectionView.ly_hideEmpty()
|
self.collectionView.ly_hideEmpty()
|
||||||
@ -120,18 +90,12 @@ class BRFavoritesViewController: BRViewController {
|
|||||||
extension BRFavoritesViewController {
|
extension BRFavoritesViewController {
|
||||||
|
|
||||||
private func br_setupUI() {
|
private func br_setupUI() {
|
||||||
view.addSubview(titleImageView)
|
|
||||||
view.addSubview(collectionView)
|
view.addSubview(collectionView)
|
||||||
view.addSubview(addFavoritesButton)
|
view.addSubview(addFavoritesButton)
|
||||||
|
|
||||||
titleImageView.snp.makeConstraints { make in
|
|
||||||
make.left.equalToSuperview().offset(15)
|
|
||||||
make.top.equalToSuperview().offset(UIScreen.statusBarHeight + 20)
|
|
||||||
}
|
|
||||||
|
|
||||||
collectionView.snp.makeConstraints { make in
|
collectionView.snp.makeConstraints { make in
|
||||||
make.left.right.equalToSuperview()
|
make.left.right.equalToSuperview()
|
||||||
make.top.equalToSuperview().offset(UIScreen.statusBarHeight + 60)
|
make.top.equalToSuperview().offset(18)
|
||||||
make.bottom.equalTo(addFavoritesButton.snp.top).offset(-10)
|
make.bottom.equalTo(addFavoritesButton.snp.top).offset(-10)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,18 +121,21 @@ extension BRFavoritesViewController {
|
|||||||
extension BRFavoritesViewController: UICollectionViewDelegate, UICollectionViewDataSource {
|
extension BRFavoritesViewController: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRFavoritesCell
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRFavoritesCell
|
||||||
cell.model = self.listArr[indexPath.row]
|
cell.model = self.listArr[indexPath.row + 1]
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|
||||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||||
return self.listArr.count
|
if self.listArr.count == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return self.listArr.count - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
|
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
|
||||||
if kind == UICollectionView.elementKindSectionHeader {
|
if kind == UICollectionView.elementKindSectionHeader {
|
||||||
let view = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "headerView", for: indexPath) as! BRFavoritesHeaderView
|
let view = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "headerView", for: indexPath) as! BRFavoritesHeaderView
|
||||||
view.model = self.playHistoryModel
|
view.model = self.listArr.first
|
||||||
return view
|
return view
|
||||||
} else {
|
} else {
|
||||||
return UICollectionReusableView()
|
return UICollectionReusableView()
|
||||||
@ -176,7 +143,7 @@ extension BRFavoritesViewController: UICollectionViewDelegate, UICollectionViewD
|
|||||||
}
|
}
|
||||||
|
|
||||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||||
let model = self.listArr[indexPath.row]
|
let model = self.listArr[indexPath.row + 1]
|
||||||
let vc = BRVideoDetailViewController()
|
let vc = BRVideoDetailViewController()
|
||||||
vc.shortPlayId = model.short_play_id
|
vc.shortPlayId = model.short_play_id
|
||||||
self.navigationController?.pushViewController(vc, animated: true)
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
@ -198,23 +165,22 @@ extension BRFavoritesViewController {
|
|||||||
$0.is_collect = true
|
$0.is_collect = true
|
||||||
}
|
}
|
||||||
self.listArr += list
|
self.listArr += list
|
||||||
|
|
||||||
|
if self.listArr.count > 0 {
|
||||||
|
self.collectionViewLayout.headerReferenceSize = .init(width: UIScreen.width, height: 180)
|
||||||
|
} else {
|
||||||
|
self.collectionViewLayout.headerReferenceSize = .zero
|
||||||
|
}
|
||||||
|
|
||||||
self.page = page
|
self.page = page
|
||||||
self.collectionView.reloadData()
|
self.collectionView.reloadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.updateEmptyStatus()
|
self.updateEmptyStatus()
|
||||||
completer?()
|
completer?()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func requestPlayHistorys() {
|
|
||||||
BRVideoAPI.requestPlayHistorys(page: 1, pageSize: 1) { [weak self] listModel in
|
|
||||||
guard let self = self else { return }
|
|
||||||
guard let list = listModel?.list else { return }
|
|
||||||
self.playHistoryModel = list.first
|
|
||||||
self.updateEmptyStatus()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// BRPlayHistorysViewController.swift
|
||||||
|
// BeeReel
|
||||||
|
//
|
||||||
|
// Created by 长沙鸿瑶 on 2025/7/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class BRPlayHistorysViewController: BRViewController {
|
||||||
|
|
||||||
|
private lazy var listArr: [BRShortModel] = []
|
||||||
|
private lazy var page = 1
|
||||||
|
|
||||||
|
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||||
|
let width = floor((UIScreen.width - 30 - 22) / 3)
|
||||||
|
let height = 144 / 108 * width
|
||||||
|
|
||||||
|
let layout = UICollectionViewFlowLayout()
|
||||||
|
layout.minimumLineSpacing = 11
|
||||||
|
layout.minimumInteritemSpacing = 11
|
||||||
|
layout.sectionInset = .init(top: 0, left: 15, bottom: 0, right: 15)
|
||||||
|
layout.itemSize = .init(width: width, height: height)
|
||||||
|
return layout
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var collectionView: BRCollectionView = {
|
||||||
|
let collectionView = BRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
|
||||||
|
collectionView.delegate = self
|
||||||
|
collectionView.dataSource = self
|
||||||
|
collectionView.ly_emptyView = BREmpty.br_normalEmptyView()
|
||||||
|
collectionView.contentInset = .init(top: 0, left: 0, bottom: UIScreen.customTabBarHeight + 10, right: 0)
|
||||||
|
collectionView.br_addRefreshHeader { [weak self] in
|
||||||
|
self?.handleHeaderRefresh(nil)
|
||||||
|
}
|
||||||
|
collectionView.br_addRefreshBackFooter(insetBottom: 0) { [weak self] in
|
||||||
|
self?.handleFooterRefresh(nil)
|
||||||
|
}
|
||||||
|
collectionView.register(BRPlayHistorysCell.self, forCellWithReuseIdentifier: "cell")
|
||||||
|
return collectionView
|
||||||
|
}()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
requestDataList(page: 1, completer: nil)
|
||||||
|
|
||||||
|
view.addSubview(collectionView)
|
||||||
|
|
||||||
|
collectionView.snp.makeConstraints { make in
|
||||||
|
make.top.equalToSuperview().offset(18)
|
||||||
|
make.left.right.bottom.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
if self.hasViewDidAppear {
|
||||||
|
requestDataList(page: 1, completer: nil)
|
||||||
|
}
|
||||||
|
super.viewDidAppear(animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func handleHeaderRefresh(_ completer: (() -> Void)?) {
|
||||||
|
self.requestDataList(page: 1) { [weak self] in
|
||||||
|
self?.collectionView.br_endHeaderRefreshing()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func handleFooterRefresh(_ completer: (() -> Void)?) {
|
||||||
|
self.requestDataList(page: self.page + 1) { [weak self] in
|
||||||
|
self?.collectionView.br_endFooterRefreshing()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - UICollectionViewDelegate & UICollectionViewDataSource
|
||||||
|
extension BRPlayHistorysViewController: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||||
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRPlayHistorysCell
|
||||||
|
cell.model = self.listArr[indexPath.row]
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||||
|
return self.listArr.count
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||||
|
let model = self.listArr[indexPath.row]
|
||||||
|
let vc = BRVideoDetailViewController()
|
||||||
|
vc.shortPlayId = model.short_play_id
|
||||||
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension BRPlayHistorysViewController {
|
||||||
|
|
||||||
|
private func requestDataList(page: Int, completer: (() -> Void)?) {
|
||||||
|
|
||||||
|
BRVideoAPI.requestPlayHistorys(page: page) { [weak self] listModel in
|
||||||
|
guard let self = self else { return }
|
||||||
|
if let list = listModel?.list {
|
||||||
|
if page == 1 {
|
||||||
|
self.listArr.removeAll()
|
||||||
|
}
|
||||||
|
list.forEach {
|
||||||
|
$0.is_collect = true
|
||||||
|
}
|
||||||
|
self.listArr += list
|
||||||
|
self.page = page
|
||||||
|
self.collectionView.reloadData()
|
||||||
|
}
|
||||||
|
completer?()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -13,17 +13,17 @@ class BRFavoritesCell: BRCollectionViewCell {
|
|||||||
didSet {
|
didSet {
|
||||||
coverView.br_setImage(url: model?.image_url)
|
coverView.br_setImage(url: model?.image_url)
|
||||||
|
|
||||||
let epString = NSMutableAttributedString()
|
// let epString = NSMutableAttributedString()
|
||||||
|
//
|
||||||
let epStr1 = NSMutableAttributedString(string: "EP.##".localizedReplace(text: model?.current_episode ?? ""))
|
// let epStr1 = NSMutableAttributedString(string: "EP.##".localizedReplace(text: model?.current_episode ?? ""))
|
||||||
epStr1.yy_color = .colorE3FC37()
|
// epStr1.yy_color = .colorE3FC37()
|
||||||
epString.append(epStr1)
|
// epString.append(epStr1)
|
||||||
|
//
|
||||||
let epStr2 = NSMutableAttributedString(string: "/" + "EP.##".localizedReplace(text: "\(model?.episode_total ?? 0)"))
|
// let epStr2 = NSMutableAttributedString(string: "/" + "EP.##".localizedReplace(text: "\(model?.episode_total ?? 0)"))
|
||||||
epStr2.yy_color = .colorD3D3D3()
|
// epStr2.yy_color = .colorD3D3D3()
|
||||||
epString.append(epStr2)
|
// epString.append(epStr2)
|
||||||
|
//
|
||||||
epLabel.attributedText = epString
|
// epLabel.attributedText = epString
|
||||||
|
|
||||||
favoriteButton.isSelected = model?.is_collect ?? false
|
favoriteButton.isSelected = model?.is_collect ?? false
|
||||||
}
|
}
|
||||||
@ -34,17 +34,17 @@ class BRFavoritesCell: BRCollectionViewCell {
|
|||||||
return imageView
|
return imageView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var bottomView: UIView = {
|
// private lazy var bottomView: UIView = {
|
||||||
let view = UIView()
|
// let view = UIView()
|
||||||
view.br_addEffectView(style: .light)
|
// view.br_addEffectView(style: .light)
|
||||||
return view
|
// return view
|
||||||
}()
|
// }()
|
||||||
|
//
|
||||||
private lazy var epLabel: UILabel = {
|
// private lazy var epLabel: UILabel = {
|
||||||
let label = UILabel()
|
// let label = UILabel()
|
||||||
label.font = .fontRegular(ofSize: 12)
|
// label.font = .fontRegular(ofSize: 12)
|
||||||
return label
|
// return label
|
||||||
}()
|
// }()
|
||||||
|
|
||||||
private lazy var favoriteButton: UIButton = {
|
private lazy var favoriteButton: UIButton = {
|
||||||
let button = UIButton(type: .custom)
|
let button = UIButton(type: .custom)
|
||||||
@ -99,23 +99,23 @@ extension BRFavoritesCell {
|
|||||||
|
|
||||||
private func br_setupUI() {
|
private func br_setupUI() {
|
||||||
contentView.addSubview(coverView)
|
contentView.addSubview(coverView)
|
||||||
contentView.addSubview(bottomView)
|
// contentView.addSubview(bottomView)
|
||||||
bottomView.addSubview(epLabel)
|
// bottomView.addSubview(epLabel)
|
||||||
contentView.addSubview(favoriteButton)
|
contentView.addSubview(favoriteButton)
|
||||||
|
|
||||||
coverView.snp.makeConstraints { make in
|
coverView.snp.makeConstraints { make in
|
||||||
make.edges.equalToSuperview()
|
make.edges.equalToSuperview()
|
||||||
}
|
}
|
||||||
|
|
||||||
bottomView.snp.makeConstraints { make in
|
// bottomView.snp.makeConstraints { make in
|
||||||
make.left.right.bottom.equalToSuperview()
|
// make.left.right.bottom.equalToSuperview()
|
||||||
make.height.equalTo(28)
|
// make.height.equalTo(28)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
epLabel.snp.makeConstraints { make in
|
// epLabel.snp.makeConstraints { make in
|
||||||
make.left.equalToSuperview().offset(6)
|
// make.left.equalToSuperview().offset(6)
|
||||||
make.centerY.equalToSuperview()
|
// make.centerY.equalToSuperview()
|
||||||
}
|
// }
|
||||||
|
|
||||||
favoriteButton.snp.makeConstraints { make in
|
favoriteButton.snp.makeConstraints { make in
|
||||||
make.top.equalToSuperview().offset(5)
|
make.top.equalToSuperview().offset(5)
|
||||||
|
@ -34,6 +34,8 @@ class BRFavoritesHeaderView: UICollectionReusableView {
|
|||||||
private lazy var bgView: UIImageView = {
|
private lazy var bgView: UIImageView = {
|
||||||
let view = UIImageView(image: UIImage(named: "history_bg_image"))
|
let view = UIImageView(image: UIImage(named: "history_bg_image"))
|
||||||
view.isUserInteractionEnabled = true
|
view.isUserInteractionEnabled = true
|
||||||
|
let tap = UITapGestureRecognizer(target: self, action: #selector(handlePlayButton))
|
||||||
|
view.addGestureRecognizer(tap)
|
||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -47,11 +49,11 @@ class BRFavoritesHeaderView: UICollectionReusableView {
|
|||||||
|
|
||||||
private lazy var playButton: UIButton = {
|
private lazy var playButton: UIButton = {
|
||||||
let button = UIButton(type: .custom)
|
let button = UIButton(type: .custom)
|
||||||
|
button.isUserInteractionEnabled = false
|
||||||
button.layer.cornerRadius = 10
|
button.layer.cornerRadius = 10
|
||||||
button.layer.masksToBounds = true
|
button.layer.masksToBounds = true
|
||||||
button.backgroundColor = .colorE3FC37()
|
button.backgroundColor = .colorE3FC37()
|
||||||
button.setImage(UIImage(named: "play_icon_06"), for: .normal)
|
button.setImage(UIImage(named: "play_icon_06"), for: .normal)
|
||||||
button.addTarget(self, action: #selector(handlePlayButton), for: .touchUpInside)
|
|
||||||
return button
|
return button
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
126
BeeReel/Class/Favorites/View/BRPlayHistorysCell.swift
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// BRPlayHistorysCell.swift
|
||||||
|
// BeeReel
|
||||||
|
//
|
||||||
|
// Created by 长沙鸿瑶 on 2025/7/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class BRPlayHistorysCell: BRCollectionViewCell {
|
||||||
|
|
||||||
|
var model: BRShortModel? {
|
||||||
|
didSet {
|
||||||
|
coverView.br_setImage(url: model?.image_url)
|
||||||
|
|
||||||
|
let epString = NSMutableAttributedString()
|
||||||
|
|
||||||
|
let epStr1 = NSMutableAttributedString(string: "EP.##".localizedReplace(text: model?.current_episode ?? ""))
|
||||||
|
epStr1.yy_color = .colorE3FC37()
|
||||||
|
epString.append(epStr1)
|
||||||
|
|
||||||
|
let epStr2 = NSMutableAttributedString(string: "/" + "EP.##".localizedReplace(text: "\(model?.episode_total ?? 0)"))
|
||||||
|
epStr2.yy_color = .colorD3D3D3()
|
||||||
|
epString.append(epStr2)
|
||||||
|
|
||||||
|
epLabel.attributedText = epString
|
||||||
|
|
||||||
|
favoriteButton.isSelected = model?.is_collect ?? false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private lazy var coverView: BRImageView = {
|
||||||
|
let imageView = BRImageView()
|
||||||
|
return imageView
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var bottomView: UIView = {
|
||||||
|
let view = UIView()
|
||||||
|
view.br_addEffectView(style: .light)
|
||||||
|
return view
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var epLabel: UILabel = {
|
||||||
|
let label = UILabel()
|
||||||
|
label.font = .fontRegular(ofSize: 12)
|
||||||
|
return label
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var favoriteButton: UIButton = {
|
||||||
|
let button = UIButton(type: .custom)
|
||||||
|
button.setImage(UIImage(named: "favorite_icon_04"), for: .normal)
|
||||||
|
button.setImage(UIImage(named: "favorite_icon_04_selected"), for: .selected)
|
||||||
|
button.setImage(UIImage(named: "favorite_icon_04_selected"), for: [.selected, .highlighted])
|
||||||
|
button.addTarget(self, action: #selector(handleFavoriteButton), for: .touchUpInside)
|
||||||
|
return button
|
||||||
|
}()
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
NotificationCenter.default.removeObserver(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
override init(frame: CGRect) {
|
||||||
|
super.init(frame: frame)
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(updateShortFavoriteStateNotification), name: BRVideoAPI.updateShortFavoriteStateNotification, object: nil)
|
||||||
|
self.contentView.layer.cornerRadius = 8
|
||||||
|
self.contentView.layer.masksToBounds = true
|
||||||
|
|
||||||
|
br_setupUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
@MainActor required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func handleFavoriteButton() {
|
||||||
|
guard let shortPlayId = self.model?.short_play_id else { return }
|
||||||
|
let isFavorite = !(self.model?.is_collect ?? false)
|
||||||
|
|
||||||
|
BRVideoAPI.requestFavorite(isFavorite: isFavorite, shortPlayId: shortPlayId, videoId: model?.short_play_video_id) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func updateShortFavoriteStateNotification(sender: Notification) {
|
||||||
|
guard let userInfo = sender.userInfo else { return }
|
||||||
|
guard let shortPlayId = userInfo["id"] as? String else { return }
|
||||||
|
guard let state = userInfo["state"] as? Bool else { return }
|
||||||
|
guard shortPlayId == self.model?.short_play_id else { return }
|
||||||
|
|
||||||
|
self.model?.is_collect = state;
|
||||||
|
|
||||||
|
favoriteButton.isSelected = self.model?.is_collect ?? false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension BRPlayHistorysCell {
|
||||||
|
|
||||||
|
private func br_setupUI() {
|
||||||
|
contentView.addSubview(coverView)
|
||||||
|
contentView.addSubview(bottomView)
|
||||||
|
bottomView.addSubview(epLabel)
|
||||||
|
contentView.addSubview(favoriteButton)
|
||||||
|
|
||||||
|
coverView.snp.makeConstraints { make in
|
||||||
|
make.edges.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
bottomView.snp.makeConstraints { make in
|
||||||
|
make.left.right.bottom.equalToSuperview()
|
||||||
|
make.height.equalTo(28)
|
||||||
|
}
|
||||||
|
|
||||||
|
epLabel.snp.makeConstraints { make in
|
||||||
|
make.left.equalToSuperview().offset(6)
|
||||||
|
make.centerY.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
favoriteButton.snp.makeConstraints { make in
|
||||||
|
make.top.equalToSuperview().offset(5)
|
||||||
|
make.right.equalToSuperview().offset(-5)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -15,7 +15,7 @@ class BRSpotlightHotCell: BRCollectionViewCell {
|
|||||||
titleLabel.text = model?.name
|
titleLabel.text = model?.name
|
||||||
categoryLabel.text = model?.category?.first
|
categoryLabel.text = model?.category?.first
|
||||||
|
|
||||||
favoriteButton.isSelected = self.model?.is_collect ?? false
|
// favoriteButton.isSelected = self.model?.is_collect ?? false
|
||||||
|
|
||||||
hotView.setNeedsUpdateConfiguration()
|
hotView.setNeedsUpdateConfiguration()
|
||||||
}
|
}
|
||||||
@ -68,23 +68,23 @@ class BRSpotlightHotCell: BRCollectionViewCell {
|
|||||||
return button
|
return button
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var favoriteButton: UIButton = {
|
// private lazy var favoriteButton: UIButton = {
|
||||||
let button = UIButton(type: .custom)
|
// let button = UIButton(type: .custom)
|
||||||
button.setImage(UIImage(named: "favorite_icon_01"), for: .normal)
|
// button.setImage(UIImage(named: "favorite_icon_01"), for: .normal)
|
||||||
button.setImage(UIImage(named: "favorite_icon_01_selected"), for: .selected)
|
// button.setImage(UIImage(named: "favorite_icon_01_selected"), for: .selected)
|
||||||
button.setImage(UIImage(named: "favorite_icon_01_selected"), for: [.selected, .highlighted])
|
// button.setImage(UIImage(named: "favorite_icon_01_selected"), for: [.selected, .highlighted])
|
||||||
button.addTarget(self, action: #selector(handleFavoriteButton), for: .touchUpInside)
|
// button.addTarget(self, action: #selector(handleFavoriteButton), for: .touchUpInside)
|
||||||
return button
|
// return button
|
||||||
}()
|
// }()
|
||||||
|
|
||||||
|
|
||||||
deinit {
|
// deinit {
|
||||||
NotificationCenter.default.removeObserver(self)
|
// NotificationCenter.default.removeObserver(self)
|
||||||
}
|
// }
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(updateShortFavoriteStateNotification), name: BRVideoAPI.updateShortFavoriteStateNotification, object: nil)
|
// NotificationCenter.default.addObserver(self, selector: #selector(updateShortFavoriteStateNotification), name: BRVideoAPI.updateShortFavoriteStateNotification, object: nil)
|
||||||
|
|
||||||
contentView.backgroundColor = .colorFFFFFF()
|
contentView.backgroundColor = .colorFFFFFF()
|
||||||
contentView.layer.cornerRadius = 10
|
contentView.layer.cornerRadius = 10
|
||||||
@ -98,27 +98,27 @@ class BRSpotlightHotCell: BRCollectionViewCell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@objc private func handleFavoriteButton() {
|
// @objc private func handleFavoriteButton() {
|
||||||
guard let shortPlayId = self.model?.short_play_id else { return }
|
// guard let shortPlayId = self.model?.short_play_id else { return }
|
||||||
|
//
|
||||||
let isFavorite = !(self.model?.is_collect ?? false)
|
// let isFavorite = !(self.model?.is_collect ?? false)
|
||||||
let videoId = self.model?.short_play_video_id
|
// let videoId = self.model?.short_play_video_id
|
||||||
|
//
|
||||||
BRVideoAPI.requestFavorite(isFavorite: isFavorite, shortPlayId: shortPlayId, videoId: videoId) {
|
// BRVideoAPI.requestFavorite(isFavorite: isFavorite, shortPlayId: shortPlayId, videoId: videoId) {
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
@objc private func updateShortFavoriteStateNotification(sender: Notification) {
|
// @objc private func updateShortFavoriteStateNotification(sender: Notification) {
|
||||||
guard let userInfo = sender.userInfo else { return }
|
// guard let userInfo = sender.userInfo else { return }
|
||||||
guard let shortPlayId = userInfo["id"] as? String else { return }
|
// guard let shortPlayId = userInfo["id"] as? String else { return }
|
||||||
guard let state = userInfo["state"] as? Bool else { return }
|
// guard let state = userInfo["state"] as? Bool else { return }
|
||||||
guard shortPlayId == self.model?.short_play_id else { return }
|
// guard shortPlayId == self.model?.short_play_id else { return }
|
||||||
|
//
|
||||||
self.model?.is_collect = state;
|
// self.model?.is_collect = state;
|
||||||
|
//
|
||||||
favoriteButton.isSelected = self.model?.is_collect ?? false
|
// favoriteButton.isSelected = self.model?.is_collect ?? false
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ extension BRSpotlightHotCell {
|
|||||||
|
|
||||||
private func br_setupUI() {
|
private func br_setupUI() {
|
||||||
contentView.addSubview(coverImageView)
|
contentView.addSubview(coverImageView)
|
||||||
contentView.addSubview(favoriteButton)
|
// contentView.addSubview(favoriteButton)
|
||||||
contentView.addSubview(titleLabel)
|
contentView.addSubview(titleLabel)
|
||||||
contentView.addSubview(playIconImageView)
|
contentView.addSubview(playIconImageView)
|
||||||
contentView.addSubview(categoryLabel)
|
contentView.addSubview(categoryLabel)
|
||||||
@ -137,10 +137,10 @@ extension BRSpotlightHotCell {
|
|||||||
make.height.equalTo(160)
|
make.height.equalTo(160)
|
||||||
}
|
}
|
||||||
|
|
||||||
favoriteButton.snp.makeConstraints { make in
|
// favoriteButton.snp.makeConstraints { make in
|
||||||
make.top.equalToSuperview().offset(4)
|
// make.top.equalToSuperview().offset(4)
|
||||||
make.right.equalToSuperview().offset(-4)
|
// make.right.equalToSuperview().offset(-4)
|
||||||
}
|
// }
|
||||||
|
|
||||||
titleLabel.snp.makeConstraints { make in
|
titleLabel.snp.makeConstraints { make in
|
||||||
make.left.equalToSuperview().offset(7)
|
make.left.equalToSuperview().offset(7)
|
||||||
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Favorites 1.imageset/Favorites@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Favorites 1.imageset/Favorites@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.9 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Favorites.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Favorites@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Favorites@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/history 1.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "history@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "history@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/history 1.imageset/history@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/history 1.imageset/history@3x.png
vendored
Normal file
After Width: | Height: | Size: 5.5 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/history.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "history@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "history@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/history.imageset/history@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/history.imageset/history@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.1 KiB |