Commit 2b2f04df authored by yqz's avatar yqz

Merge branch 'dev_main' of http://gitlab.zhangxindiet.com/ShuMing/phonemanager into dev_main

* 'dev_main' of http://gitlab.zhangxindiet.com/ShuMing/phonemanager:
  fix bugs
parents 2acf69cc 766549b8
......@@ -94,10 +94,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// ]
// let dic = attribution.jso
Print("获取当前归因信息",attribution?.jsonResponse as Any)
// APIReportManager.shared.startReport(type: .source_atrribute,ext: pram)
//APIReportManager.shared.startReport(type: .source_atrribute,ext: pram)
}
PMLoadingHUD.share.config()
return true
}
......
......@@ -187,6 +187,9 @@ class GroupDatabase {
// 根据mediaType查询数据
func queryByMediaType(_ mediaType: Int) -> [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int, groupId: String)] {
if PhotoManager.shared.permissionStatus != .authorized {
return []
}
let queryStatementString = "SELECT * FROM groups WHERE mediaType = ?;"
var queryStatement: OpaquePointer?
var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int, groupId: String)] = []
......
......@@ -183,6 +183,9 @@ class TrashDatabase {
// 根据mediaType查询数据
func queryByMediaType(_ mediaType: Int) -> [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int)] {
if PhotoManager.shared.permissionStatus != .authorized {
return []
}
let queryStatementString = "SELECT * FROM trash WHERE mediaType = ?;"
var queryStatement: OpaquePointer?
var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int)] = []
......
......@@ -719,6 +719,25 @@ extension PhotoManager{
extension PhotoManager{
//调用系统删除
func deleteAssets(localIdentifiers: [String],suc:@escaping () -> ()) {
// 获取要删除的 PHAsset
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: localIdentifiers, options: nil)
// 开始删除操作
PHPhotoLibrary.shared().performChanges({
// 创建删除请求
PHAssetChangeRequest.deleteAssets(fetchResult)
}) { success, error in
if success {
suc()
} else if let error = error {
print("删除失败: \(error.localizedDescription)")
PMLoadingHUD.share.disMiss()
}
}
}
// 处理app图片删除
func removeDataWhenDeleteInPage(data:[AssetModel],completionHandler: (() -> Void)? = nil){
......
......@@ -83,7 +83,7 @@ class CompressController : BaseViewController {
func getViewData(){
if PhotoManager.shared.permissionStatus == .denied{
loadPermissView(CGRect(x: 0, y: 200, width: ScreenW, height: 450))
loadPermissView(CGRect(x: 0, y: 300, width: ScreenW, height: 450))
return
}
......
......@@ -83,22 +83,22 @@ class HomeInfoViewController:BaseViewController {
}
let fetchs = PHAsset.fetchAssets(withLocalIdentifiers: tempStringArray, options: nil)
let fileSize = FileTool().calculateTotalAssetSize(fetchResult: fetchs)
PhotoAndVideoMananger.deleteAssets(localIdentifiers: tempStringArray) {[weak self] in
PMLoadingHUD.share.show()
PhotoManager.shared.deleteAssets(localIdentifiers: tempStringArray) {[weak self] in
guard let self else {return}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
PMLoadingHUD.share.disMiss()
// 更新免费次数
if isAfterAdv == false {
updateFreeTimes()
}
self.showDeleteSuccess(fileCount: tempStringArray.count, fileSize: fileSize)
PhotoManager.shared.removeDataWhenDeleteInPage(data: imgs)
let new = self.ids?.removingElementsAndSmallGroups(ids: imgs.compactMap{$0.localIdentifier})
......@@ -107,7 +107,7 @@ class HomeInfoViewController:BaseViewController {
self.tablewView.ids = self.ids
self.tablewView.deleteModel(array: imgs)
self.setDefaultPage()
}
......@@ -123,6 +123,9 @@ class HomeInfoViewController:BaseViewController {
}
}
}
}
// 显示弹出框
......@@ -483,7 +486,7 @@ class HomeInfoViewController:BaseViewController {
extension UIViewController{
func loadPermissView(_ frame:CGRect = CGRect(x: 0, y: 100+kSafeAreaInsets.top, width: ScreenW, height: 450)){
func loadPermissView(_ frame:CGRect = CGRect(x: 0, y: 200+kSafeAreaInsets.top, width: ScreenW, height: 340)){
let permissionView = Bundle.main.loadNibNamed("PMPermissionView", owner: nil)?.last as! PMPermissionView
permissionView.frame = frame
self.view.addSubview(permissionView)
......
......@@ -681,29 +681,35 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel.map{$0.localIdentifier}, options: nil)
let fileSize = FileTool().calculateTotalAssetSize(fetchResult: fetchResult)
PMLoadingHUD.share.show()
PHPhotoLibrary.shared().performChanges ({
PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration)
}){ success, error in
if(success){
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss()
print("删除文件成功")
if isAfterAdv == false {
self.updateFreeTimes()
CATransaction.begin()
CATransaction.setCompletionBlock {
PHPhotoLibrary.shared().performChanges ({
PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration)
}){ success, error in
if(success){
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
PMLoadingHUD.share.disMiss()
print("删除文件成功")
if isAfterAdv == false {
self.updateFreeTimes()
}
self.showDeleteSuccess(fileCount: self.selectedModel.count, fileSize: fileSize)
// 移除当前总数据源的数据
self.updateCurrentPageWhenDeleteAny()
}
}else {
PMLoadingHUD.share.disMiss()
if let error = error {
print("删除文件时出错: \(error.localizedDescription)")
}
self.showDeleteSuccess(fileCount: self.selectedModel.count, fileSize: fileSize)
// 移除当前总数据源的数据
self.updateCurrentPageWhenDeleteAny()
}
}else {
PMLoadingHUD.share.disMiss()
if let error = error {
print("删除文件时出错: \(error.localizedDescription)")
}
}
}
CATransaction.commit()
}
// 删除成功页面
......
......@@ -18,12 +18,17 @@ class PMLoadingHUD{
return loadingView
}()
func config(){
//loadingView.animationView.play()
loadingView.isHidden = false
}
func show(_ title:String = "Deleting...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){
disMiss()
DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.setTitleAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play()
}
}
......@@ -33,8 +38,8 @@ class PMLoadingHUD{
DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play()
self.loadingView.setTitleAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play()
}
}
......@@ -52,24 +57,29 @@ class PMLoadingHUD{
}
class PMLoadingView: UIView {
var title: UILabel!
var subtitle: UILabel!
var animationView: LottieAnimationView!
var title:UILabel!
// 标记动画是否已加载
private var isAnimationLoaded = false
var subtitle:UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupUI() {
self.backgroundColor = UIColor.black.withAlphaComponent(0.8)
// 先创建空的动画视图,不加载内容
animationView = LottieAnimationView()
animationView.loopMode = .loop
addSubview(animationView)
animationView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(200)
}
title = UILabel()
title.text = "Deleting..."
......@@ -85,37 +95,63 @@ class PMLoadingView: UIView {
subtitle.font = UIFont.systemFont(ofSize: 18, weight: .semibold)
addSubview(subtitle)
// 设置约束
setupConstraints()
// 异步加载动画
loadAnimationAsync()
}
private func setupConstraints() {
animationView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(300)
}
title.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(animationView.snp.bottom).offset(-80)
}
subtitle.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.width.equalTo(250)
make.top.equalTo(title.snp.bottom).offset(2)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
private func loadAnimationAsync() {
DispatchQueue.global().async { [weak self] in
guard let self = self else { return }
// 在后台线程解析动画
let animation = LottieAnimation.named("PMAnimationLoaing")
DispatchQueue.main.async {
// 主线程更新 UI
self.animationView.animation = animation
self.isAnimationLoaded = true
// 如果视图已经显示,则立即播放
if self.superview != nil {
self.animationView.play()
}
}
}
}
lazy var animationView : LottieAnimationView = {
let animationView = LottieAnimationView(name: "PMAnimationLoaing")
animationView.loopMode = .loop
return animationView
}()
func setTitleaAndSubTitle(title:String,subTitle:String){
func setTitleAndSubTitle(title: String, subTitle: String) {
self.title.text = title
self.subtitle.text = subTitle
}
// 重写添加到父视图的方法,在视图显示时播放动画
// override func didMoveToSuperview() {
// super.didMoveToSuperview()
// if isAnimationLoaded && superview != nil {
// animationView.play()
// }
// }
}
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