From 1cd9e117f34e937d9e71369e2851a44028396511 Mon Sep 17 00:00:00 2001 From: zjx Date: Thu, 24 Jul 2025 10:26:12 +0800 Subject: [PATCH] =?UTF-8?q?1=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeeReel.xcodeproj/project.pbxproj | 8 + .../BRHomeTop10ViewController.swift | 4 +- .../Controller/BRHomeViewController.swift | 32 ++++ .../Home/View/BRHomePlayRecordButton.swift | 118 ++++++++++++ .../Home/View/BRHomePlayRecordView.swift | 168 ++++++++++++++++++ .../PopularPicks/BRPopularPicksCell.swift | 2 +- .../View/Spotlight/BRSpotlightHotCell.swift | 2 +- .../View/Spotlight/BRSpotlightTopCell.swift | 2 +- .../Home/View/Top10/BRHomeTop10Cell.swift | 2 +- .../Home/View/Top10/BRHomeTop3Cell.swift | 11 +- .../Search/View/BRSearchResultView.swift | 7 + .../icon/Polygon 4.imageset/Contents.json | 22 +++ .../icon/Polygon 4.imageset/Polygon 4@2x.png | Bin 0 -> 409 bytes .../icon/Polygon 4.imageset/Polygon 4@3x.png | Bin 0 -> 522 bytes .../icon/Union.imageset/Contents.json | 22 +++ .../icon/Union.imageset/Union@2x.png | Bin 0 -> 336 bytes .../icon/Union.imageset/Union@3x.png | Bin 0 -> 440 bytes .../icon/tv_icon_01.imageset/Contents.json | 22 +++ .../icon/tv_icon_01.imageset/Frame@2x.png | Bin 0 -> 1462 bytes .../icon/tv_icon_01.imageset/Frame@3x.png | Bin 0 -> 2109 bytes 20 files changed, 415 insertions(+), 7 deletions(-) create mode 100644 BeeReel/Class/Home/View/BRHomePlayRecordButton.swift create mode 100644 BeeReel/Class/Home/View/BRHomePlayRecordView.swift create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Contents.json create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@2x.png create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@3x.png create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Contents.json create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@2x.png create mode 100644 BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@3x.png create mode 100644 BeeReel/Sources/Assets.xcassets/icon/tv_icon_01.imageset/Contents.json create mode 100644 BeeReel/Sources/Assets.xcassets/icon/tv_icon_01.imageset/Frame@2x.png create mode 100644 BeeReel/Sources/Assets.xcassets/icon/tv_icon_01.imageset/Frame@3x.png diff --git a/BeeReel.xcodeproj/project.pbxproj b/BeeReel.xcodeproj/project.pbxproj index dde285c..5228980 100644 --- a/BeeReel.xcodeproj/project.pbxproj +++ b/BeeReel.xcodeproj/project.pbxproj @@ -61,6 +61,8 @@ BF3A56852E30CA78009E5CF9 /* BRSearchResultCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */; }; BF3A56882E30E0DD009E5CF9 /* BREmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */; }; BF3A568A2E30E7EF009E5CF9 /* BRNetworkStatusManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */; }; + BF3A568C2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */; }; + BF3A568E2E310217009E5CF9 /* BRHomePlayRecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */; }; BF692AEB2E0A475D00A5C2DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */; }; BF692AEC2E0A475D00A5C2DA /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF692AE82E0A475D00A5C2DA /* SceneDelegate.swift */; }; BF692AEE2E0A475D00A5C2DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF692AE22E0A475D00A5C2DA /* Assets.xcassets */; }; @@ -208,6 +210,8 @@ BF3A56842E30CA78009E5CF9 /* BRSearchResultCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRSearchResultCell.swift; sourceTree = ""; }; BF3A56872E30E0DD009E5CF9 /* BREmpty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BREmpty.swift; sourceTree = ""; }; BF3A56892E30E7EF009E5CF9 /* BRNetworkStatusManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRNetworkStatusManager.swift; sourceTree = ""; }; + BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRHomePlayRecordButton.swift; sourceTree = ""; }; + BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRHomePlayRecordView.swift; sourceTree = ""; }; BF692AC92E0A475500A5C2DA /* BeeReel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BeeReel.app; sourceTree = BUILT_PRODUCTS_DIR; }; BF692AE12E0A475D00A5C2DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; BF692AE22E0A475D00A5C2DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -848,6 +852,8 @@ BFC676762E0E950A006659E5 /* Spotlight */, BF692B6D2E0BD4CB00A5C2DA /* BRHomeHeaderView.swift */, BFC6766A2E0E395F006659E5 /* BRHomeHeaderBannerCell.swift */, + BF3A568B2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift */, + BF3A568D2E310217009E5CF9 /* BRHomePlayRecordView.swift */, ); path = View; sourceTree = ""; @@ -1136,6 +1142,7 @@ BF692B782E0D3A1200A5C2DA /* BRHomeModuleItem.swift in Sources */, BF692B5A2E0AAADD00A5C2DA /* BRPlayerListCell.swift in Sources */, BF02B8312E30897700172177 /* BRSearchHomeView.swift in Sources */, + BF3A568C2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift in Sources */, BF692B162E0A7CD600A5C2DA /* BRHUD.swift in Sources */, BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */, BF3338EA2E152B8100B10F76 /* BRPlayerCache.swift in Sources */, @@ -1143,6 +1150,7 @@ BFC676952E126BBF006659E5 /* BRSpotlightNewCell.swift in Sources */, BF692B402E0A8FA100A5C2DA /* UIColor+BRAdd.swift in Sources */, BF692B102E0A7B4300A5C2DA /* BRUserDefaultsKey.swift in Sources */, + BF3A568E2E310217009E5CF9 /* BRHomePlayRecordView.swift in Sources */, BFC676852E122D9E006659E5 /* BRVideoDetailViewController.swift in Sources */, BFC676912E126248006659E5 /* BRSpotlightTopCell.swift in Sources */, BFC676B72E137DFC006659E5 /* BRPopularPicksCell.swift in Sources */, diff --git a/BeeReel/Class/Home/Controller/BRHomeTop10ViewController.swift b/BeeReel/Class/Home/Controller/BRHomeTop10ViewController.swift index 56cd66e..04dbffe 100644 --- a/BeeReel/Class/Home/Controller/BRHomeTop10ViewController.swift +++ b/BeeReel/Class/Home/Controller/BRHomeTop10ViewController.swift @@ -79,13 +79,13 @@ extension BRHomeTop10ViewController: UICollectionViewDelegate, UICollectionViewD if indexPath.section == 0 { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "BRHomeTop3Cell", for: indexPath) as! BRHomeTop3Cell - cell.model = model cell.num = indexPath.row + 1 + cell.model = model return cell } else { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRHomeTop10Cell - cell.model = model cell.num = indexPath.row + 4 + cell.model = model return cell } } diff --git a/BeeReel/Class/Home/Controller/BRHomeViewController.swift b/BeeReel/Class/Home/Controller/BRHomeViewController.swift index 3209676..863faf4 100644 --- a/BeeReel/Class/Home/Controller/BRHomeViewController.swift +++ b/BeeReel/Class/Home/Controller/BRHomeViewController.swift @@ -137,6 +137,13 @@ class BRHomeViewController: BRViewController { return button }() + private lazy var recordButton: BRHomePlayRecordButton = { + let size = 48.0 + let button = BRHomePlayRecordButton(frame: .init(x: UIScreen.width - size - 15, y: UIScreen.statusBarHeight + 350, width: size, height: size)) + button.isHidden = true + return button + }() + override func viewDidLoad() { super.viewDidLoad() self.edgesForExtendedLayout = [.top, .bottom] @@ -147,6 +154,7 @@ class BRHomeViewController: BRViewController { br_setupUI() requestHomeData() + requestPlayHistorys() setupPageView() @@ -158,6 +166,13 @@ class BRHomeViewController: BRViewController { self.navigationController?.setNavigationBarHidden(true, animated: true) } + override func viewDidAppear(_ animated: Bool) { + if self.hasViewDidAppear { + requestPlayHistorys() + } + super.viewDidAppear(animated) + } + private func updateStatusBarStyle() { let point = self.pageView.downSc?.contentOffset ?? .zero @@ -170,6 +185,7 @@ class BRHomeViewController: BRViewController { } override func handleHeaderRefresh(_ completer: (() -> Void)?) { + requestPlayHistorys() self.requestGroup.enter() requestHomeData { [weak self] in @@ -197,6 +213,7 @@ extension BRHomeViewController { view.addSubview(bgImageView) view.addSubview(pageView) menuLeftView.addSubview(searchButton) + view.addSubview(recordButton) bgImageView.snp.makeConstraints { make in make.top.equalToSuperview().offset(0) @@ -283,6 +300,21 @@ extension BRHomeViewController { } + 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 } + + let model = list.first + self.recordButton.model = model + if model == nil { + self.recordButton.isHidden = true + } else { + self.recordButton.isHidden = false + } + } + } + } diff --git a/BeeReel/Class/Home/View/BRHomePlayRecordButton.swift b/BeeReel/Class/Home/View/BRHomePlayRecordButton.swift new file mode 100644 index 0000000..8ddb1f1 --- /dev/null +++ b/BeeReel/Class/Home/View/BRHomePlayRecordButton.swift @@ -0,0 +1,118 @@ +// +// BRHomePlayRecordButton.swift +// BeeReel +// +// Created by 湖南秦九 on 2025/7/23. +// + +import UIKit + +class BRHomePlayRecordButton: UIView { + + + var model: BRShortModel? { + didSet { + + } + } + + var minY: CGFloat = UIScreen.statusBarHeight + var maxY: CGFloat = UIScreen.height - UIScreen.customTabBarHeight - 48 - 10 + + var minX: CGFloat = 15 + var maxX: CGFloat = UIScreen.width - 15 - 48 + + private lazy var iconView: UIImageView = { + let view = UIImageView(image: UIImage(named: "tv_icon_01")) + return view + }() + + + + override init(frame: CGRect) { + super.init(frame: frame) + + self.backgroundColor = .colorFFFFFF() + self.layer.cornerRadius = 12 + self.layer.shadowColor = UIColor.color000000(alpha: 0.15).cgColor + self.layer.shadowOpacity = 1 + self.layer.shadowRadius = 14 + self.layer.shadowOffset = .init(width: 0, height: 0) + + self.addSubview(iconView) + + iconView.snp.makeConstraints { make in + make.center.equalToSuperview() + } + + + let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture)) + self.addGestureRecognizer(pan) + + let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture)) + self.addGestureRecognizer(tap) + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @objc private func handlePanGesture(sender: UIPanGestureRecognizer) { + let state = sender.state + + switch state { + case .began: + sender.setTranslation(.zero, in: self.superview) + + case .changed: + let point = sender.translation(in: self.superview) + sender.setTranslation(.zero, in: self.superview) + var newFrame = self.frame + newFrame.origin.y += point.y + newFrame.origin.x += point.x + + if newFrame.origin.y < minY { + newFrame.origin.y = minY + } + if newFrame.origin.y > maxY { + newFrame.origin.y = maxY + } + if newFrame.origin.x > maxX { + newFrame.origin.x = maxX + } + if newFrame.origin.x < minX { + newFrame.origin.x = minX + } + + self.frame = newFrame + + default: + let superCenterX = self.superview?.centerX ?? 0 + var resultX = 15.0 + + if self.centerX >= superCenterX { + resultX = (self.superview?.frame.width ?? 0) - self.frame.size.width - 15 + } + var newFrame = self.frame + newFrame.origin.x = resultX + + UIView.animate(withDuration: 0.3) { + self.frame = newFrame + } + + brLog(message: "end") + } + } + + + @objc private func handleTapGesture() { + let view = BRHomePlayRecordView() + view.model = self.model + if self.frame.minX == minX { + view.show(startFrame: self.frame, animateDirection: .right) + } else { + view.show(startFrame: self.frame, animateDirection: .left) + } + } +} diff --git a/BeeReel/Class/Home/View/BRHomePlayRecordView.swift b/BeeReel/Class/Home/View/BRHomePlayRecordView.swift new file mode 100644 index 0000000..301c0cc --- /dev/null +++ b/BeeReel/Class/Home/View/BRHomePlayRecordView.swift @@ -0,0 +1,168 @@ +// +// BRHomePlayRecordView.swift +// BeeReel +// +// Created by 湖南秦九 on 2025/7/23. +// + +import UIKit + +class BRHomePlayRecordView: UIView { + + enum AnimateDirection: Int { + ///从右至左 + case left = 1 + ///从左至右 + case right = 2 + } + + var model: BRShortModel? { + didSet { + label.text = model?.name + } + } + + private var oldFrame: CGRect = .zero + + ///动画方向 + private var animateDirection: AnimateDirection = .left + + private lazy var contentView: UIView = { + let view = UIView() + view.backgroundColor = .colorFFFFFF() + view.layer.cornerRadius = 12 + view.layer.masksToBounds = true + return view + }() + + private lazy var iconView: UIImageView = { + let view = UIImageView(image: UIImage(named: "tv_icon_01")) + return view + }() + + private lazy var label: UILabel = { + let label = UILabel() + label.font = .fontRegular(ofSize: 14) + label.textColor = .color1C1C1C() + return label + }() + + private lazy var closeButton: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "Union"), for: .normal) + button.addTarget(self, action: #selector(handleCloseButton), for: .touchUpInside) + return button + }() + + private lazy var playButton: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "Polygon 4"), for: .normal) + button.addTarget(self, action: #selector(handlePlayButton), for: .touchUpInside) + return button + }() + + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .color000000(alpha: 0.4) + + br_setupUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + super.touchesBegan(touches, with: event) + } + + func show(startFrame: CGRect, animateDirection: AnimateDirection) { + self.oldFrame = startFrame + self.animateDirection = animateDirection + BRAppTool.keyWindow?.addSubview(self) + self.frame = BRAppTool.keyWindow?.bounds ?? .zero + + self.contentView.frame = startFrame + + let endWidth: CGFloat = 282.0 + var endX: CGFloat = 0.0 + + if animateDirection == .left { + endX = self.frame.size.width - 15 - endWidth + } else { + endX = 15 + } + + let endFrame = CGRect(x: endX, y: startFrame.origin.y, width: endWidth, height: startFrame.size.height) + + + UIView.animate(withDuration: 0.3) { + self.contentView.frame = endFrame + } completion: { _ in + + } + } + + func dismiss(completion: (() -> Void)? = nil) { + UIView.animate(withDuration: 0.3) { + self.contentView.frame = self.oldFrame + } completion: { _ in + self.removeFromSuperview() + completion?() + } + } + +} + +extension BRHomePlayRecordView { + @objc private func handleCloseButton() { + dismiss() + } + + @objc private func handlePlayButton() { + dismiss { [weak self] in + let vc = BRVideoDetailViewController() + vc.shortPlayId = self?.model?.short_play_id + BRAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true) + } + } +} + +extension BRHomePlayRecordView { + + private func br_setupUI() { + addSubview(contentView) + contentView.addSubview(iconView) + contentView.addSubview(closeButton) + contentView.addSubview(label) + contentView.addSubview(playButton) + + iconView.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalToSuperview().offset(12) + } + + label.snp.makeConstraints { make in + make.left.equalToSuperview().offset(46) + make.centerY.equalToSuperview() + make.width.equalTo(154) + } + + playButton.snp.makeConstraints { make in + make.top.equalToSuperview() + make.centerY.equalToSuperview() + make.left.equalTo(label.snp.right).offset(16) + make.width.equalTo(34) + } + + closeButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.top.equalToSuperview() + make.left.equalTo(playButton.snp.right).offset(0) + make.width.equalTo(32) + } + + } + +} diff --git a/BeeReel/Class/Home/View/PopularPicks/BRPopularPicksCell.swift b/BeeReel/Class/Home/View/PopularPicks/BRPopularPicksCell.swift index 7e108e9..2cbe691 100644 --- a/BeeReel/Class/Home/View/PopularPicks/BRPopularPicksCell.swift +++ b/BeeReel/Class/Home/View/PopularPicks/BRPopularPicksCell.swift @@ -63,7 +63,7 @@ class BRPopularPicksCell: BRCollectionViewCell { guard let self = self else { return } let count = model?.watch_total ?? 0 var string = "\(count)" - if count > 100 { + if count > 1000 { string = String(format: "%.1fk", Float(count) / 1000) } button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) diff --git a/BeeReel/Class/Home/View/Spotlight/BRSpotlightHotCell.swift b/BeeReel/Class/Home/View/Spotlight/BRSpotlightHotCell.swift index 7cb1ee2..447fedb 100644 --- a/BeeReel/Class/Home/View/Spotlight/BRSpotlightHotCell.swift +++ b/BeeReel/Class/Home/View/Spotlight/BRSpotlightHotCell.swift @@ -59,7 +59,7 @@ class BRSpotlightHotCell: BRCollectionViewCell { guard let self = self else { return } let count = model?.watch_total ?? 0 var string = "\(count)" - if count > 100 { + if count > 1000 { string = String(format: "%.1fk", Float(count) / 1000) } button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) diff --git a/BeeReel/Class/Home/View/Spotlight/BRSpotlightTopCell.swift b/BeeReel/Class/Home/View/Spotlight/BRSpotlightTopCell.swift index 17c58fd..7f35acc 100644 --- a/BeeReel/Class/Home/View/Spotlight/BRSpotlightTopCell.swift +++ b/BeeReel/Class/Home/View/Spotlight/BRSpotlightTopCell.swift @@ -91,7 +91,7 @@ class BRSpotlightTopCell: BRCollectionViewCell { guard let self = self else { return } let count = model?.watch_total ?? 0 var string = "\(count)" - if count > 100 { + if count > 1000 { string = String(format: "%.1fk", Float(count) / 1000) } button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) diff --git a/BeeReel/Class/Home/View/Top10/BRHomeTop10Cell.swift b/BeeReel/Class/Home/View/Top10/BRHomeTop10Cell.swift index 5385bfa..b1c3071 100644 --- a/BeeReel/Class/Home/View/Top10/BRHomeTop10Cell.swift +++ b/BeeReel/Class/Home/View/Top10/BRHomeTop10Cell.swift @@ -75,7 +75,7 @@ class BRHomeTop10Cell: BRCollectionViewCell { guard let self = self else { return } let count = model?.watch_total ?? 0 var string = "\(count)" - if count > 100 { + if count > 1000 { string = String(format: "%.1fk", Float(count) / 1000) } button.configuration?.attributedTitle = AttributedString.br_createAttributedString(string: string, color: .colorFF7489(), font: .fontRegular(ofSize: 10)) diff --git a/BeeReel/Class/Home/View/Top10/BRHomeTop3Cell.swift b/BeeReel/Class/Home/View/Top10/BRHomeTop3Cell.swift index ec61315..a351211 100644 --- a/BeeReel/Class/Home/View/Top10/BRHomeTop3Cell.swift +++ b/BeeReel/Class/Home/View/Top10/BRHomeTop3Cell.swift @@ -12,7 +12,16 @@ class BRHomeTop3Cell: BRCollectionViewCell { var model: BRShortModel? { didSet { - coverImageView.br_setImage(url: model?.image_url) + if num == 1 { + + coverImageView.br_setImage(url: model?.image_url) + } else { + if let image = model?.horizontally_img, !image.isEmpty { + coverImageView.br_setImage(url: image) + } else { + coverImageView.br_setImage(url: model?.image_url) + } + } } } diff --git a/BeeReel/Class/Search/View/BRSearchResultView.swift b/BeeReel/Class/Search/View/BRSearchResultView.swift index b7eed9e..8ae5ba7 100644 --- a/BeeReel/Class/Search/View/BRSearchResultView.swift +++ b/BeeReel/Class/Search/View/BRSearchResultView.swift @@ -92,6 +92,13 @@ extension BRSearchResultView: UICollectionViewDelegate, UICollectionViewDataSour func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 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.viewController?.navigationController?.pushViewController(vc, animated: true) + } } diff --git a/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Contents.json b/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Contents.json new file mode 100644 index 0000000..fd0bec5 --- /dev/null +++ b/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@2x.png b/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6a177375c95f2412bd57a6fb18de371c31f3b5 GIT binary patch literal 409 zcmV;K0cQS*P)Cf+{CyxIs8UIYP#c9=k<7K`lP^j2-yM-}$sqoM24; z5(XLjr}uw)_9Gfuwiu!)`fy$M+w;69-}iqv5DkptR;=0TZ02$FeM!4w;GJ ziHo9O$B99}Lt)QR*sJb8E#M(f!roGKwe#~bV~cmq+~kfN00000NkvXXu0mjf D#zU%D literal 0 HcmV?d00001 diff --git a/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@3x.png b/BeeReel/Sources/Assets.xcassets/icon/Polygon 4.imageset/Polygon 4@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..32ebb37b6ec598f80cd8f16853d8a735d8d3706b GIT binary patch literal 522 zcmV+l0`>igP)WL7tvb2gn$w~R3!$MF|v)}(~;G)>QWp7UaIGV$@^1VP|}CKVaa zW-}Y1TVbBz*v#j1zE~_iuP9I~gMP9sWA`3nFm{q8->cQ?L{$OR;3iQ3WCaFbgCa?R zOE|}ILO4}m13e`T{u97k-}1Kx3jq}VFPF;~+KSLpoxy?*=>Mgy|0=-0{Fg1i60jJ6 z?DkU%76KsuFXTTA2`)to?oe(&8wLays{F_7&tmztg9WWc|1B6;<>z-jWX2+#j{+u* z0;Wb|4DhRIn$JTnE)Rzjh9O-+JGkuM_SnC@i}TvR2)yFzrLrD<-~ZRMX#peDMWBN~ z|Is_D!5-Y&Vz22%C15Hm+?&z6l@(7MP83B) zP$1b)Ci(cJ3Q8(6HVlKZx%b?&EUUARb*hf3jCy17n2PtizCPCJ2Ol!l8o^Q42><{9 M07*qoM6N<$f^y8<7ytkO literal 0 HcmV?d00001 diff --git a/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Contents.json b/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Contents.json new file mode 100644 index 0000000..491dc35 --- /dev/null +++ b/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Union@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Union@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@2x.png b/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..85e8fc10921208f9ea46a60bf3af70f5fcab8a0c GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9E$svykh8Km+7D9BhG z{y;LUjQRVhb zlQ?#_?Gp`HG86wD=}5SDSxuC&=343AkBs$RXPo5}9zEWj)|MEtK>7E+^VgydCqKV4 zcT(x*+}k|8oevdF`W|1NKRwQq>-*!@n-Xd^Q^b=u?1-`aVdDEfyC*+q;+%v0Olz00 zo#$F2#JNXfh3AqF!H%9zE()#TtgM_K50xA}l^TmVSU#o}PTCo>Dt|)ue~qhlioA19 zGo3ommGxlZvsq~_x;8Fa2gP={HLWdJ$x{75i1XW_>`5j5c}>$*+HH5TpZn;a^I*Hb e-Of+jpRyXhx7fR9@_JC%F?hQAxvX literal 0 HcmV?d00001 diff --git a/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@3x.png b/BeeReel/Sources/Assets.xcassets/icon/Union.imageset/Union@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa089dc62e92b57962562897f3e50fe796239a0e GIT binary patch literal 440 zcmV;p0Z0CcP)500009a7bBm001F4 z001F40Y#QEU;qFB0drDELIAGL9O(c600d`2O+f$vv5yPft0 zp*T>+Ik#xWQc>NR#B0Fg!iud!jNw4EAQ2|Dj%>w?_A)kxv!Io3t}KjXWi0_^F`6Y_ z3&OJ@B_OnbXhCQN(SXnrA_bu}L;}JZ5H9GY3t)P*pEQ0UsRX2aTr i@V}Q@kPsBsrQ+|v1Y??R3M0000g z5Tz171eZDjiQZxkAR&Zou+ye+sOzHk5ZlZ5wzJ!{z3Y0`YqwSNNvj!;XJ_7f^X;2A zZ;1Bs2tflD78WY}aGe4I#yb~_#SAV<5+Rw+tyW7j48wd-uguTSr)UJQ5g_rs zYA+5_co=xDfS7QdC&Xm@;i@z_lrd)+3TE#|OIHP4IQk%wsn_dSuRr?~fNLy3`-I&A zJVi0mGE0J2I&L`#Awv;VOS*OLQUE?VjUppnV!@N6a?~%dsU=XP9iA=+Sx)u#vlS4W zuZYf4Zc$8j49^xODN;b_b=SZu=u~p{v3Ft!@7z_h62h-xf&!idmm<_iPyk>VFs73_ zYrTD(p#)pdw7!fLd$)fPY7{s``1#MHm0D}rsJE62*Nhd7e1I*E@v1_$S7?9&aUsAj zBmoTSbgxctp}%qLy7uAwH|T1;ooIKA%eD5iY4U+kD6}PH)B65%5$Fc_1gw=oNU(%4 zHm$aAzPL^Ao&1-+{`|H^hLWkbmn(m_RuU8tq@vMbz`O+o6Q|G4&|EBHwq2{YiC5ya z=XdG%Ut5|&Mqw0MIT5%57G8S&Abt7MQ}j;iFddHGorV=zKXIKbTD96ng=tkWblv z1{z6VtO~Hu=X1BZto{tFe%C{}A4Nc?OC*7@D1cp9f9u3QCT%RROFey7H5G7&(I6v~ zUzoa*AqfPkfC#?MVaHsvgy)a;&9@Jk-pCtDDH2wabIO$}Ng_}MApExTz)kfH66sOF8C#T2%Ye@3sQikjg?Z zozvjGxq9B5tU5ea21VM+-oaX9%if8En=XF#t%`Few*9oo`+GuUA7+rfTN-!jQP9BF3L+e~BTBI+WcmAm#j7*{?CtHTSXmtogR^kD zkfVXNBW~WVFU}R0Zx_8j=1D^c&xvMNuhe(0!_Cp|?Ck6%C@@3!ZV)F95!qhgYp6l{ z%)m=NaVe*>tF-n2;WpR#(gEdP6pXMOtf?3;4{z9D%0lpxpIgg)?Bj96{}1e@%wTR> QfdBvi07*qoM6N<$f{Tu+=>Px# literal 0 HcmV?d00001 diff --git a/BeeReel/Sources/Assets.xcassets/icon/tv_icon_01.imageset/Frame@3x.png b/BeeReel/Sources/Assets.xcassets/icon/tv_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b3d0c926580b29aafcc7f6c31d059149a144de GIT binary patch literal 2109 zcmV-D2*US?P)=WmaSW|gP~yn^1H%HcsEV_xkh&O+ zB7OAHN4FyajEsz=v8my3c%J*>F-Av6C-LkJY^%e=!%=YvK5+nrLLrWy82_uP8ZQ=$ zX|G7aV?rF9QmHhHXNRyw6h)a4hu{c7=ulR_&rX6gj^vcM2#^!SU@VI^I9B~>2Yzt? zTU%Qz!C+94`i`C)8X5}W_|M`ns8W!c1q{YPeLMEA2LgdaKA-Dx7xngBUB#9=r}5CM|%AmO@+%7w6-&BGqIZ&(Rx|6{^wmF~Ax9C*R=O#1_U`#e`G0@}9BuO#3sj1g-BTDrW zkeDer7~>>1j~MDO#@aGW2pAh6ITXE!z70}Con4SNz(5a@S58B8LIM#;&SLB{2F(aT z7)aVVtLthch|$Vo~Y&;q@rp*e}sn`<4ep}KEs6({XUp&dt`ABJHci2 z)6-9qS1#s5kJgLak13+guNRKbKT^jc;xGmV28j66 zek>1`{;M>qN^+p|&$63pXO%Y|M@QIsZ<#s8`*5vm=eY1s|6 zvqHxRs)9t_y7!h`y1HM?h@!etny$@0tu&}glxpXeeKMls1Xc0ghkNDA8*j?#^RJs8 z|9W<-OqAX}6-%nC-j3)Rf`~&Sewn%)l3Vu<$~*7wt~*|}PjjDdmiMb_w_ZHHn%f?W zi3{i|f~p`Nkse<@DI;y7;{@@u(k$Ydnw zsX)yuB_%boYsvAC3Z4^$6vrfTF{XhW)rdy8C3R9|t`OLpJRHcllH2y2AhXZcRHw9$rK?>UfCnX_4? zV%onNf>;uwH(Zp6Mzw^HmMNPR_mn2-1kgWDZEBWIX~ppoeVbJYUJXG$pKnE9LT%0rVK3HmJY$BSc;NvOw?tpuCE~oFL+nKa0LHZ@w#Aju_j$L z$DvOAnbz)CUUbrKg{;#+zs?#Y`ghB7^*fsAZ5VDg0Z-IYdV%+miY>}|UB%iATDrH! zaac_=h`K<~Wcd+`t&j9VWqmVP6v<~G;p0}<)VX=T-=8pe92Q%rHRgL3?7!Ix0t|jb z`&joCj;r@Vq0n>O=%lWhDia?X8j1viLDn^ArAI(w&~MsAe(^Bo!&7T(YYokZ(%{BP zG4V*{iy&bj(6i$2odW%gHdy0kYXw2W$!H^zdK|WwSJ+u`$n_hnwTVgZBO?`ZGIlSp zoz9>xLuBJpNxVm-N1!>JMJ_*Rg_sxD%MPH$OHo5dsOvKtdCV_+_G!lK+3-#zCf{}8 ni54Wja?kFgk3Rb7qXYOK{BGF_#QPHe00000NkvXXu0mjfd!yiP literal 0 HcmV?d00001