Commit ca1f9038 authored by CZ1004's avatar CZ1004

首页数据加载+详情

parent c81e34c9
{
"images" : [
{
"filename" : "btn_play_home.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "btn_play_home@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "btn_play_home@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
......@@ -39,6 +39,7 @@ class ChargeInfoViewController:BaseViewController {
lazy var backImageView:ChargeInfoBackView = {
let sview:ChargeInfoBackView = ChargeInfoBackView(frame: view.bounds, model: self.model!)
sview.model = self.model
return sview
}()
......
......@@ -29,28 +29,6 @@ class ChargeViewController:BaseViewController {
let sview:ChargeView = ChargeView(frame: CGRect(x: 0, y: cY, width: view.width, height: view.height - cY))
sview.callBack = {[weak self] model in
guard let self else {return}
DispatchQueue.main.async {[weak self] in
guard let self else {return}
if let cModel = model as? ChargeDataModel {
sview.callOrder = {[weak self] flag in
guard let self else {return}
let vc:ChargeInfoViewController = ChargeInfoViewController(model: cModel, type: ChargeInfoViewController.ChargeInfoType.setting)
vc.flag = flag as? Int
self.navigationController?.pushViewController(vc, animated: true)
}
}
}
}
return sview
}()
......@@ -63,6 +41,13 @@ class ChargeViewController:BaseViewController {
titleView.addSubview(detailsBtn)
view.addSubview(chargeView)
self.chargeView.clickCallBack = {[weak self] model,row in
guard let self else {return}
let vc:ChargeInfoViewController = ChargeInfoViewController(model: model, type: ChargeInfoViewController.ChargeInfoType.setting)
vc.flag = row
self.navigationController?.pushViewController(vc, animated: true)
}
}
override func viewDidAppear(_ animated: Bool) {
......
......@@ -56,7 +56,7 @@ class ChargeInfoBackView:UIView {
setupUI()
self.videoPlayView.playVideo(with: self.model!.url)
self.videoPlayView.playVideo(with: model.url)
setupTimeUpdates()
......
......@@ -10,9 +10,7 @@ import AVFoundation
class ChargeView:UIView {
var callBack : callBack<Any> = {model in }
var callOrder : callBack<Any> = {flag in }
var clickCallBack : (ChargeDataModel,Int)->Void = {model,index in}
let footerID:String = "footerID"
......@@ -101,9 +99,7 @@ extension ChargeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UIC
let model = models[indexPath.row]
self.callBack(model)
self.callOrder(indexPath.row)
self.clickCallBack(model,indexPath.row)
}
......
......@@ -37,7 +37,7 @@ class HomeInfoViewController:BaseViewController {
let cY:CGFloat = titleView.y + titleView.height
let sview:HomeInfoView = HomeInfoView(frame: CGRect(x: 0, y: cY, width: view.width, height: view.height - cY), ids: ids,type: self.type)
let sview:HomeInfoView = HomeInfoView(frame: CGRect(x: 0, y: cY, width: view.width, height: view.height - cY), ids: ids,type: self.type,titleText: titleText)
sview.callBack = {[weak self] isSeleted in
......@@ -91,9 +91,12 @@ class HomeInfoViewController:BaseViewController {
var ids: [[String]]?
init(ids: [[String]],type:PhotsFileType?) {
var titleText : String?
init(ids: [[String]],type:PhotsFileType?,titleText:String) {
self.ids = ids
self.type = type
self.titleText = titleText
super.init(nibName: nil, bundle: nil)
}
......
//
// HomeVideoDetailController.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import Foundation
class HomeVideoDetailController :BaseViewController {
private var videoDetailNavView:VideoDetaiNavView?
var model : HomePhotosModel? {
didSet{
self.collectionView.reloadData()
}
}
// 排序
var currentSort : Int = 0 {
didSet{
clearSelected()
}
}
// 资源类型 - 相册或者视频
var currentResourceType : Int = 0
// 所有的数据
var resourceData = [HomePhotosModel](){
didSet{
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}
}
// 当前页面选中的
var selectedModel : [ResourceModel] = []
lazy var collectionView:UICollectionView = {
let layout = WaterfallMutiSectionFlowLayout()
layout.delegate = self
let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 102), collectionViewLayout: layout)
sview.register(HomeVideoDetailCell.self, forCellWithReuseIdentifier: "HomeVideoDetailCell")
sview.register(HomeVideoDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomeVideoDetailCustomHeaderView")
sview.register( UICollectionReusableView.self,forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter,withReuseIdentifier: "footerID")
sview.dataSource = self
sview.delegate = self
sview.showsVerticalScrollIndicator = false
if #available(iOS 11.0, *) {
sview.contentInsetAdjustmentBehavior = .never
}
sview.backgroundColor = .clear
return sview
}()
lazy var deleteButton : UIButton = {
let view = UIButton()
view.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
view.setTitle("Delete", for: UIControl.State.normal)
view.setTitleColor(UIColor(red: 1, green: 1, blue: 1, alpha: 1), for: .normal)
view.clipsToBounds = true
view.layer.cornerRadius = 23
view.backgroundColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
view.addTarget(self, action: #selector(deleteButtonAction), for: .touchUpInside)
return view
}()
func setUI(){
videoDetailNavView = VideoDetaiNavView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: statusBarHeight + 44))
self.view.addSubview(videoDetailNavView!)
videoDetailNavView?.snp.makeConstraints({ make in
make.top.centerX.width.equalToSuperview()
make.height.equalTo(statusBarHeight + 44)
})
self.view.insertSubview(collectionView, at: 0)
self.view.addSubview(self.deleteButton)
self.deleteButton.snp.makeConstraints { make in
make.top.equalTo(self.collectionView.snp.bottom).offset(16)
make.left.equalToSuperview().offset(15)
make.right.equalToSuperview().offset(-15)
make.height.equalTo(46)
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
self.navigationController?.navigationBar.isHidden = true
setUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 目的是为了消除cell 的选择按钮状态
if self.selectedModel.count == 0 {
self.collectionView.reloadData()
}
}
}
extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICollectionViewDelegate {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.resourceData.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CompressSelectCell", for: indexPath) as! CompressSelectCell
return cell
}
func heightForRowAtIndexPath(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, indexPath: IndexPath, itemWidth: CGFloat) -> CGFloat {
return itemWidth
}
func columnNumber(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> Int {
return 2
}
func lineSpacing(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
return 8
}
func interitemSpacing(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
return 11
}
func spacingWithLastSection(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
return 8
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
}
func referenceSizeForHeader(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGSize {
return CGSize (width: self.collectionView.width, height: 168)
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HomeVideoDetailCustomHeaderView", for: indexPath) as! HomeVideoDetailCustomHeaderView
return header
}else{
let footer = collectionView.dequeueReusableSupplementaryView(
ofKind: kind,
withReuseIdentifier: "footerID",
for: indexPath
)
return footer
}
}
func sortByType(sortType:Int,header:CompressCustomHeaderView){
switch sortType {
case 0:
header.selectlabel.text = "Largest"
// 按照文件大小降序
break
case 1:
header.selectlabel.text = "Smallest"
// 按照文件大小升序
break
case 2:
header.selectlabel.text = "Newest"
// 按照时间降序
break
case 3:
header.selectlabel.text = "Oldest"
// 按照时间升序
break
default:
break
}
}
@objc func deleteButtonAction(){
// 然后清理下当前页面的值
clearSelected()
}
func clearSelected() {
self.selectedModel.removeAll()
}
}
......@@ -22,18 +22,38 @@ class HomeViewController:BaseViewController {
homeView = HomeView(frame: view.bounds)
homeView?.titleCallBack = {[weak self] array in
DispatchQueue.main.async {[weak self] in
guard let self else {return}
let vc:HomeInfoViewController = HomeInfoViewController(ids: array as! [[String]], type: .similar)
homeView?.titleCallBack = {[weak self] model,type in
guard let self else {return}
DispatchQueue.main.async {
let vc:HomeInfoViewController = HomeInfoViewController(ids: model.assets , type: type,titleText: model.folderName)
self.navigationController?.pushViewController(vc, animated: true)
}
}
homeView?.otherItemCallBack = {[weak self] model,otherItemRow in
guard let self else {return}
if otherItemRow == 0 {
DispatchQueue.main.async {
let vc:HomeVideoDetailController = HomeVideoDetailController()
vc.model = model
self.navigationController?.pushViewController(vc, animated: true)
}
}
if otherItemRow == 1 {
DispatchQueue.main.async {
let vc:HomeInfoViewController = HomeInfoViewController(ids: model.assets , type: .similarScreenshots ,titleText: model.folderName)
self.navigationController?.pushViewController(vc, animated: true)
}
}
if otherItemRow == 3 {
DispatchQueue.main.async {
let vc:HomeInfoViewController = HomeInfoViewController(ids: model.assets , type: .SimilarVideos ,titleText: model.folderName)
self.navigationController?.pushViewController(vc, animated: true)
}
}
}
homeView?.indexCallBack = {[weak self] index in
guard let self else {return}
......
......@@ -11,6 +11,10 @@ class HomeInfoView :UIView{
var ids:[[String]]?
var titleText : String?
var type : PhotsFileType?
var models:[HomeInfoTableItem] = []
var callBack:callBack<Any> = {text in}
......@@ -39,6 +43,8 @@ class HomeInfoView :UIView{
let sview:HomeInfoTitleView = HomeInfoTitleView(frame: CGRect(x: 0, y: 0, width: width, height: 84))
sview.titleLabel.text = self.titleText
return sview
}()
......@@ -66,9 +72,11 @@ class HomeInfoView :UIView{
return sview
}()
init(frame: CGRect,ids:[[String]]?,type:PhotsFileType?) {
init(frame: CGRect,ids:[[String]]?,type:PhotsFileType?,titleText:String?) {
self.ids = ids
self.titleText = titleText
self.type = type
for array in ids ?? [] {
......@@ -87,6 +95,7 @@ class HomeInfoView :UIView{
let smodel = HomeInfoTableItem()
smodel.type = type
smodel.smodels = smodels
smodel.titleText = titleText
models.append(smodel)
}
......@@ -210,9 +219,9 @@ class HomeInfoView :UIView{
}
}
headerView.changeContent(title: PhotsFileType.duplicates.rawValue, allNumber: number, seletedCount: seletedNumber)
headerView.changeContent(title: self.type!.rawValue, allNumber: number, seletedCount: seletedNumber)
deleteView.changeContent(title: PhotsFileType.duplicates.rawValue, seletedCount: seletedNumber)
deleteView.changeContent(title: self.type!.rawValue, seletedCount: seletedNumber)
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: deleteView.isHidden ? 12 : deleteView.height + 12 , right: 0)
}
......
//
// HomeVideoDetailCustomHeaderView.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import Foundation
class HomeVideoDetailCustomHeaderView : UICollectionReusableView {
lazy var modelTitlelabel :UILabel = {
let label = UILabel()
label.text = "Videos"
label.textAlignment = .left
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.font = UIFont.systemFont(ofSize: 20, weight: .bold)
return label
}()
lazy var btnView :UIView = {
let view = UIView()
view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
view.layer.cornerRadius = 16
view.clipsToBounds = true
return view
}()
lazy var selectImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_newest_similar")
return view
}()
lazy var selectlabel :UILabel = {
let label = UILabel()
label.text = "Largest"
label.textAlignment = .center
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
return label
}()
lazy var sizeLabel :UILabel = {
let label = UILabel()
label.text = "1.02 GB"
label.textAlignment = .left
label.textColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
label.font = UIFont.systemFont(ofSize: 14, weight: .regular)
return label
}()
lazy var tipBackView :UIView = {
let view = UIView()
view.backgroundColor = UIColor(red: 0.95, green: 0.96, blue: 0.99, alpha: 1)
view.layer.cornerRadius = 8
view.clipsToBounds = true
return view
}()
lazy var tipImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_cmpress_home_nor")
return view
}()
lazy var tipLabel :UILabel = {
let label = UILabel()
label.text = "Video Compress"
label.textAlignment = .left
label.numberOfLines = 0
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
return label
}()
lazy var tipDetailLabel :UILabel = {
let label = UILabel()
label.text = "Tap to start the process"
label.textAlignment = .left
label.numberOfLines = 0
label.textColor = UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 1)
label.font = UIFont.systemFont(ofSize: 12, weight: .regular)
return label
}()
lazy var saveSizeLabel :UILabel = {
let label = UILabel()
label.text = "13.5M"
label.textAlignment = .right
label.textColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
return label
}()
lazy var moreImageView :UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_cmpress_home_nor")
return view
}()
private func setUI(){
self.addSubview(self.modelTitlelabel)
self.addSubview(self.btnView)
self.addSubview(self.sizeLabel)
self.btnView.addSubview(self.selectImageView)
self.btnView.addSubview(self.selectlabel)
self.addSubview(self.tipBackView)
self.tipBackView.addSubview(self.tipImageView)
self.tipBackView.addSubview(self.tipLabel)
self.tipBackView.addSubview(self.tipDetailLabel)
self.tipBackView.addSubview(self.saveSizeLabel)
self.tipBackView.addSubview(self.moreImageView)
self.modelTitlelabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(14)
make.width.equalTo(96 * RScreenW())
make.height.equalTo(28)
}
self.btnView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(0)
make.top.equalToSuperview().offset(12)
make.width.equalTo(103 * RScreenW())
make.height.equalTo(32)
}
self.selectImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.centerY.equalToSuperview()
make.width.height.equalTo(20)
}
self.selectlabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-12)
make.top.equalToSuperview().offset(6)
make.width.equalTo(60 * RScreenW())
make.height.equalTo(20)
}
self.sizeLabel.snp.makeConstraints { make in
make.left.equalTo(0)
make.right.equalTo(0)
make.top.equalTo(self.btnView.snp.bottom).offset(8)
make.height.equalTo(20)
}
self.tipBackView.snp.makeConstraints { make in
make.left.equalTo(0)
make.right.equalTo(0)
make.top.equalTo(self.sizeLabel.snp.bottom).offset(12)
make.height.equalTo(70)
}
self.tipImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(15)
make.centerY.equalToSuperview()
make.width.height.equalTo(30)
}
self.tipLabel.snp.makeConstraints { make in
make.left.equalTo(self.tipImageView.snp.right).offset(10)
make.width.equalTo(120 * RScreenW())
make.height.equalTo(28)
make.top.equalToSuperview().offset(5)
}
self.tipDetailLabel.snp.makeConstraints { make in
make.left.equalTo(self.tipImageView.snp.right).offset(10)
make.width.equalTo(150 * RScreenW())
make.height.equalTo(23)
make.top.equalTo(self.tipLabel.snp.bottom).offset(4)
}
self.moreImageView.snp.makeConstraints { make in
make.height.width.equalTo(20)
make.right.equalToSuperview().offset(-15)
make.centerY.equalToSuperview()
}
self.saveSizeLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalTo(self.moreImageView.snp.left).offset(-10)
make.height.equalTo(28)
make.width.equalTo(100)
}
}
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .white
setUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setUI()
}
}
......@@ -16,10 +16,12 @@ class HomeView:UIView {
private var bottomView:UIView?
var titleCallBack:callBack<Any> = {array in}
var titleCallBack:(HomePhotosModel,PhotsFileType)->Void = {model,type in}
var indexCallBack:callBack<Any> = {index in }
var otherItemCallBack : (HomePhotosModel,Int)->Void = {data,otherCellRow in}
var model:PhotosManagerModel? {
didSet {
......@@ -236,9 +238,11 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
return cell
case 1:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeOtherCollectionCell.identifier, for: indexPath) as! HomeOtherCollectionCell
cell.playImageView.isHidden = true
cell.mediaType = 0
if indexPath.row == 0 {
if indexPath.row == 0 || indexPath.row == 3{
cell.mediaType = 1
cell.playImageView.isHidden = false
}
cell.model = model?.otherModelArray[indexPath.row]
return cell
......@@ -305,12 +309,18 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if (indexPath.section == 0) {
let smodel = model?.titleModelArray[indexPath.row]
titleCallBack(smodel?.assets ?? [])
if indexPath.row == 0 {
titleCallBack(smodel!,.duplicates)
}else{
titleCallBack(smodel!,.similar)
}
}else{
let smodel = model?.otherModelArray[indexPath.row]
otherItemCallBack(smodel!,indexPath.row)
}
}
}
......@@ -20,4 +20,5 @@ class HomeInfoTableItem {
var type:PhotsFileType?
var smodels:[ImageSeletedCollectionItem]?
var titleText : String?
}
//
// VideoDetaiNavView.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import Foundation
class VideoDetaiNavView : UIView {
private var backButton:UIButton!
private var selectButton:UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupUI() {
backgroundColor = .white
backButton = UIButton()
backButton.setImage(UIImage(named: "nav_back"), for: .normal)
backButton.addTarget(self, action: #selector(backBtnClick), for: .touchUpInside)
self.addSubview(backButton)
backButton.snp.makeConstraints { make in
make.centerY.equalTo(navCenterY)
make.left.equalToSuperview().offset(marginLR)
make.width.height.equalTo(iconWH)
}
selectButton = UIButton(frame: CGRect(x: 0, y: 0, width: 70, height: iconWH))
selectButton.setTitle("Select", for: .normal)
selectButton.addTarget(self, action: #selector(proBtnClick), for: .touchUpInside)
self.addSubview(selectButton)
selectButton.snp.makeConstraints { make in
make.centerY.equalTo(navCenterY)
make.right.equalToSuperview().offset(-15)
make.width.equalTo(70)
make.height.equalTo(iconWH)
}
}
@objc private func backBtnClick() {
self.responderViewController()?.navigationController?.popViewController(animated: true)
}
@objc private func proBtnClick() {
Print("点击了选择按钮")
}
}
......@@ -98,7 +98,7 @@ class HomeInfoTableViewCell:UITableViewCell {
backView?.centerY = CGFloat(cH / 2)
backView?.centerX = ScreenW / 2
numberLabel?.text = "\(model.smodels?.count ?? 0) " + "Duplicates"
numberLabel?.text = "\(model.smodels?.count ?? 0) \(String(model.titleText!))"
numberLabel?.sizeToFit()
numberLabel?.x = (backView?.x ?? 0) + marginLR
numberLabel?.y = (backView?.y ?? 0) + marginLR
......@@ -192,6 +192,7 @@ extension HomeInfoTableViewCell:UICollectionViewDelegate,UICollectionViewDataSou
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ImageSeletedCollectionCell.identifiers, for: indexPath) as! ImageSeletedCollectionCell
cell.model = model?.smodels?[indexPath.row]
cell.photsFileType = model?.type
cell.callBack = {[weak self] _ in
......
......@@ -26,7 +26,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
let iv = UIView()
iv.clipsToBounds = true
iv.layer.cornerRadius = 8
iv.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
iv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.2000)
return iv
}()
......@@ -64,6 +64,14 @@ class HomeOtherCollectionCell: UICollectionViewCell {
return label
}()
var playImageView : UIImageView = {
let iv = UIImageView()
iv.contentMode = .scaleAspectFill
iv.image = UIImage(named: "btn_play_home")
iv.backgroundColor = .clear
return iv
}()
// MARK: - Lifecycle
override init(frame: CGRect) {
super.init(frame: frame)
......@@ -79,6 +87,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
backgroundColor = UIColor.colorWithHex(hexStr: "#F2F6FC")
self.contentView.addSubview(self.titleLabel)
self.contentView.addSubview(self.imageView)
self.contentView.addSubview(self.playImageView)
self.imageView.addSubview(self.infoBackView)
self.infoBackView.addSubview(self.countLabel)
......@@ -93,8 +102,31 @@ class HomeOtherCollectionCell: UICollectionViewCell {
didSet {
guard let model else {return}
DispatchQueue.main.async {
// 设置标题
self.titleLabel.text = model.folderName
// 获取数量
var count = 0
for item in model.assets {
count = count + item.count
}
// 设置数量文字
if self.mediaType == 0 {
self.countLabel.text = "\(count) Photos"
}else{
self.countLabel.text = "\(count) Videos"
}
// 设置文件大小文字
let sizeKB : Double = model.allFileSize/1024
if sizeKB < 1024{
self.sizeLabel.text = String(format: "(%.2lf) KB" ,sizeKB)
}else if sizeKB < (1024 * 1024) && sizeKB > 1024{
self.sizeLabel.text = String(format: "(%.2lf) MB" ,sizeKB/1024)
}else{
self.sizeLabel.text = String(format: "(%.2lf) GB" ,sizeKB/(1024 * 1024))
}
}
titleLabel.text = model.folderName
guard let asset = model.assets.first?.first else {return}
if self.mediaType == 0 {
......@@ -158,19 +190,22 @@ class HomeOtherCollectionCell: UICollectionViewCell {
self.layer.masksToBounds = true
imageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(self.titleLabel.snp.bottom).offset(8)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(16)
make.width.equalToSuperview().offset(-32)
make.height.equalTo(self.width - 32)
}
self.infoBackView.snp.makeConstraints { make in
make.right.bottom.equalToSuperview()
make.left.right.bottom.equalToSuperview()
make.height.equalTo(40)
make.width.equalTo(114)
}
self.playImageView.snp.makeConstraints { make in
make.width.height.equalTo(43)
make.center.equalTo(self.imageView.snp.center)
}
titleLabel.snp.makeConstraints { make in
......@@ -180,7 +215,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
self.countLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.top.equalToSuperview().offset(4)
make.top.equalToSuperview().offset(3)
make.width.equalTo(68)
make.height.equalTo(20)
}
......
......@@ -40,6 +40,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
self.layer.cornerRadius = 12
self.layer.masksToBounds = true
titleLabel = UILabel()
titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .bold)
titleLabel?.textColor = UIColor.colorWithHex(hexStr: black3Color)
......@@ -64,7 +65,9 @@ class HomeTitleCollectionCell:UICollectionViewCell {
collectionView?.dataSource = self
collectionView?.delegate = self
collectionView?.isUserInteractionEnabled = true
self.contentView.isUserInteractionEnabled = true
self.isUserInteractionEnabled = true
nextImage = UIImageView(image: UIImage(named: "icon_left_setting"))
}
......
//
// HomeVideoDetailCell.swift
// PhoneManager
//
// Created by edy on 2025/4/9.
//
import Foundation
import Photos
class HomeVideoDetailCell : UICollectionViewCell {
var currentMediaType : Int = 0
var choose : Bool = false {
didSet{
if choose {
self.selectImageView.image = UIImage(named: "ic_unsel_com")
}else{
self.selectImageView.image = UIImage(named: "ic_sel_com")
}
}
}
lazy var backImageView: UIImageView = {
let view = UIImageView()
view.isUserInteractionEnabled = true
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
view.layer.masksToBounds = true
view.layer.cornerRadius = 12
return view
}()
lazy var saveSizeView: UIView = {
let view = UIView()
view.layer.masksToBounds = true
view.layer.cornerRadius = 4
view.backgroundColor = UIColor(red: 0, green: 0.51, blue: 1, alpha: 1)
return view
}()
lazy var saveSizeLabel: UILabel = {
let view = UILabel()
view.textAlignment = .left
view.textColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
view.font = UIFont.systemFont(ofSize: 12, weight: .regular)
view.text = "Save 1.3MB"
return view
}()
lazy var moreImageView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "icon_left_setting_grey")
view.backgroundColor = .clear
return view
}()
lazy var selectImageView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "ic_sel_com")
view.backgroundColor = .clear
view.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(selectClick))
view.addGestureRecognizer(tap)
return view
}()
@objc func selectClick(){
self.choose = !self.choose
}
override init(frame: CGRect) {
super.init(frame: frame)
self.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(imageClick))
self.addGestureRecognizer(tap)
self.addSubview(self.backImageView)
self.addSubview(self.saveSizeView)
self.saveSizeView.addSubview(self.saveSizeLabel)
self.saveSizeView.addSubview(self.moreImageView)
self.addSubview(self.selectImageView)
self.backImageView.snp.makeConstraints { make in
make.left.right.height.width.equalToSuperview()
}
self.saveSizeView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.bottom.equalToSuperview().offset(-12)
make.height.equalTo(25)
make.width.equalTo(120)
}
self.saveSizeLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(8)
make.centerY.equalToSuperview()
make.height.equalTo(25)
make.width.equalTo(105)
}
self.moreImageView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-4)
make.centerY.equalToSuperview()
make.height.width.equalTo(16)
}
self.selectImageView.snp.makeConstraints { make in
make.bottom.right.equalToSuperview().offset(-12)
make.height.width.equalTo(24)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func imageClick(){
}
}
......@@ -57,7 +57,7 @@ class ImageCollectionCell:UICollectionViewCell {
backImageView?.contentMode = .scaleAspectFill
backImageView?.clipsToBounds = true
backImageView?.layer.masksToBounds = true
backImageView?.isUserInteractionEnabled = true
self.backgroundColor = .clear
}
......
......@@ -7,6 +7,7 @@
import UIKit
import SnapKit
import Photos
class ImageSeletedCollectionCell:UICollectionViewCell {
......@@ -29,6 +30,7 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var photsFileType: PhotsFileType?
var model:ImageSeletedCollectionItem! {
......@@ -55,29 +57,54 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
}else {
DispatchQueue.global().async {[weak self] in
guard let self else {return}
if let asset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id]) {
let image = PhotoAndVideoMananger.mananger.getImageFromAsset(asset: asset)
model.image = image
DispatchQueue.main.async {[weak self] in
guard let self else {return}
// 如果是图片
if self.photsFileType == .SimilarVideos {
// 定义请求选项来获取视频的第一帧
let options = PHImageRequestOptions()
// 获取当前版本的照片或视频
options.version = .current
// 尽可能快地提供结果
options.deliveryMode = .opportunistic
// 允许从iCloud请求
options.isNetworkAccessAllowed = true
// 异步请求
options.isSynchronous = false
// 从 PHAsset 获取 AVAsset
if let videoAsset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id]){
// 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager.default().requestImage(for: videoAsset, targetSize: CGSize(width: 400, height: 400), contentMode: PHImageContentMode.aspectFit, options: options) { image, _ in
// 处理获取到的图片
if let thumbnailImage = image {
// 使用获取到的图片,例如显示在UIImageView上
DispatchQueue.main.async { [weak self] in
guard let self else {return}
// 确保在主线程更新UI
self.model.image = thumbnailImage
self.backImageView?.image = thumbnailImage
}
} else {
print("无法获取图片")
}
}
}
}else{
if let asset = PhotoAndVideoMananger.mananger.getPHAsssetwithID(ids: [model.id]){
let image = PhotoAndVideoMananger.mananger.getImageFromAsset(asset: asset)
backImageView?.image = image
model.image = image
DispatchQueue.main.async {[weak self] in
guard let self else {return}
backImageView?.image = image
}
}
}
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment