Commit 4a942378 authored by CZ1004's avatar CZ1004

Merge branch 'dev_main' into dev_zhaoqian

* dev_main:
  ui 调整
  fix bugs
  ui 调整
  ui 调整
parents af886a40 2b2f04df
...@@ -94,10 +94,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -94,10 +94,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// ] // ]
// let dic = attribution.jso // let dic = attribution.jso
Print("获取当前归因信息",attribution?.jsonResponse as Any) 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 return true
} }
......
...@@ -187,6 +187,9 @@ class GroupDatabase { ...@@ -187,6 +187,9 @@ class GroupDatabase {
// 根据mediaType查询数据 // 根据mediaType查询数据
func queryByMediaType(_ mediaType: Int) -> [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int, groupId: String)] { 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 = ?;" let queryStatementString = "SELECT * FROM groups WHERE mediaType = ?;"
var queryStatement: OpaquePointer? var queryStatement: OpaquePointer?
var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int, groupId: String)] = [] var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int, groupId: String)] = []
......
...@@ -183,6 +183,9 @@ class TrashDatabase { ...@@ -183,6 +183,9 @@ class TrashDatabase {
// 根据mediaType查询数据 // 根据mediaType查询数据
func queryByMediaType(_ mediaType: Int) -> [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int)] { 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 = ?;" let queryStatementString = "SELECT * FROM trash WHERE mediaType = ?;"
var queryStatement: OpaquePointer? var queryStatement: OpaquePointer?
var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int)] = [] var result: [(localIdentifier: String, assetSize: Double, createDate: Date, mediaType: Int)] = []
......
...@@ -719,6 +719,25 @@ extension PhotoManager{ ...@@ -719,6 +719,25 @@ extension PhotoManager{
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图片删除 // 处理app图片删除
func removeDataWhenDeleteInPage(data:[AssetModel],completionHandler: (() -> Void)? = nil){ func removeDataWhenDeleteInPage(data:[AssetModel],completionHandler: (() -> Void)? = nil){
......
...@@ -83,7 +83,7 @@ class CompressController : BaseViewController { ...@@ -83,7 +83,7 @@ class CompressController : BaseViewController {
func getViewData(){ func getViewData(){
if PhotoManager.shared.permissionStatus == .denied{ 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 return
} }
......
...@@ -93,10 +93,10 @@ ...@@ -93,10 +93,10 @@
<rect key="frame" x="393" y="0.0" width="393" height="613.33333333333337"/> <rect key="frame" x="393" y="0.0" width="393" height="613.33333333333337"/>
<subviews> <subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="equalCentering" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="2Yh-GL-Q2t"> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="equalCentering" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="2Yh-GL-Q2t">
<rect key="frame" x="38" y="5" width="317" height="433.33333333333331"/> <rect key="frame" x="37.666666666666686" y="30" width="317.66666666666669" height="408.33333333333331"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2 Similar" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IhS-Gp-baN"> <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2 Similar" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IhS-Gp-baN">
<rect key="frame" x="0.0" y="0.0" width="317" height="16"/> <rect key="frame" x="0.0" y="-16" width="317.66666666666669" height="16"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="16" id="eb1-DU-oKO"/> <constraint firstAttribute="height" constant="16" id="eb1-DU-oKO"/>
</constraints> </constraints>
...@@ -105,13 +105,13 @@ ...@@ -105,13 +105,13 @@
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tips_similar_1" translatesAutoresizingMaskIntoConstraints="NO" id="kvj-jW-PoF"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tips_similar_1" translatesAutoresizingMaskIntoConstraints="NO" id="kvj-jW-PoF">
<rect key="frame" x="0.0" y="31" width="317" height="178"/> <rect key="frame" x="0.0" y="0.0" width="317.66666666666669" height="178.33333333333334"/>
<constraints> <constraints>
<constraint firstAttribute="width" secondItem="kvj-jW-PoF" secondAttribute="height" multiplier="317:178" id="IaD-TY-qFl"/> <constraint firstAttribute="width" secondItem="kvj-jW-PoF" secondAttribute="height" multiplier="317:178" id="IaD-TY-qFl"/>
</constraints> </constraints>
</imageView> </imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2 Similar" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GIs-vI-kWE"> <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2 Similar" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GIs-vI-kWE">
<rect key="frame" x="0.0" y="224" width="317" height="16.333333333333343"/> <rect key="frame" x="0.0" y="186" width="317.66666666666669" height="16"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="16.329999999999998" id="9nH-oa-mxO"/> <constraint firstAttribute="height" constant="16.329999999999998" id="9nH-oa-mxO"/>
</constraints> </constraints>
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tips_similar_2" translatesAutoresizingMaskIntoConstraints="NO" id="x0D-ou-xRd"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tips_similar_2" translatesAutoresizingMaskIntoConstraints="NO" id="x0D-ou-xRd">
<rect key="frame" x="0.0" y="255.33333333333331" width="317" height="178"/> <rect key="frame" x="0.0" y="230" width="317.66666666666669" height="178.33333333333337"/>
<constraints> <constraints>
<constraint firstAttribute="width" secondItem="x0D-ou-xRd" secondAttribute="height" multiplier="317:178" id="J9F-Fe-BXn"/> <constraint firstAttribute="width" secondItem="x0D-ou-xRd" secondAttribute="height" multiplier="317:178" id="J9F-Fe-BXn"/>
</constraints> </constraints>
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
<constraint firstAttribute="bottom" secondItem="jsL-Yg-DRw" secondAttribute="bottom" constant="5" id="43v-pu-Het"/> <constraint firstAttribute="bottom" secondItem="jsL-Yg-DRw" secondAttribute="bottom" constant="5" id="43v-pu-Het"/>
<constraint firstAttribute="trailing" secondItem="jsL-Yg-DRw" secondAttribute="trailing" constant="40" id="5Ef-zt-VFy"/> <constraint firstAttribute="trailing" secondItem="jsL-Yg-DRw" secondAttribute="trailing" constant="40" id="5Ef-zt-VFy"/>
<constraint firstItem="jsL-Yg-DRw" firstAttribute="top" secondItem="2Yh-GL-Q2t" secondAttribute="bottom" constant="55" id="J8w-6L-NOv"/> <constraint firstItem="jsL-Yg-DRw" firstAttribute="top" secondItem="2Yh-GL-Q2t" secondAttribute="bottom" constant="55" id="J8w-6L-NOv"/>
<constraint firstItem="2Yh-GL-Q2t" firstAttribute="top" secondItem="hlo-KY-MjE" secondAttribute="top" constant="5" id="YLv-9p-1VS"/> <constraint firstItem="2Yh-GL-Q2t" firstAttribute="top" secondItem="hlo-KY-MjE" secondAttribute="top" constant="30" id="YLv-9p-1VS"/>
<constraint firstItem="jsL-Yg-DRw" firstAttribute="leading" secondItem="hlo-KY-MjE" secondAttribute="leading" constant="40" id="r4Y-Et-KLn"/> <constraint firstItem="jsL-Yg-DRw" firstAttribute="leading" secondItem="hlo-KY-MjE" secondAttribute="leading" constant="40" id="r4Y-Et-KLn"/>
<constraint firstItem="2Yh-GL-Q2t" firstAttribute="centerX" secondItem="hlo-KY-MjE" secondAttribute="centerX" id="wde-o8-kYH"/> <constraint firstItem="2Yh-GL-Q2t" firstAttribute="centerX" secondItem="hlo-KY-MjE" secondAttribute="centerX" id="wde-o8-kYH"/>
</constraints> </constraints>
......
...@@ -83,22 +83,22 @@ class HomeInfoViewController:BaseViewController { ...@@ -83,22 +83,22 @@ class HomeInfoViewController:BaseViewController {
} }
let fetchs = PHAsset.fetchAssets(withLocalIdentifiers: tempStringArray, options: nil) let fetchs = PHAsset.fetchAssets(withLocalIdentifiers: tempStringArray, options: nil)
let fileSize = FileTool().calculateTotalAssetSize(fetchResult: fetchs) 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} guard let self else {return}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
PMLoadingHUD.share.disMiss() PMLoadingHUD.share.disMiss()
// 更新免费次数 // 更新免费次数
if isAfterAdv == false { if isAfterAdv == false {
updateFreeTimes() updateFreeTimes()
} }
self.showDeleteSuccess(fileCount: tempStringArray.count, fileSize: fileSize) self.showDeleteSuccess(fileCount: tempStringArray.count, fileSize: fileSize)
PhotoManager.shared.removeDataWhenDeleteInPage(data: imgs) PhotoManager.shared.removeDataWhenDeleteInPage(data: imgs)
let new = self.ids?.removingElementsAndSmallGroups(ids: imgs.compactMap{$0.localIdentifier}) let new = self.ids?.removingElementsAndSmallGroups(ids: imgs.compactMap{$0.localIdentifier})
...@@ -107,7 +107,7 @@ class HomeInfoViewController:BaseViewController { ...@@ -107,7 +107,7 @@ class HomeInfoViewController:BaseViewController {
self.tablewView.ids = self.ids self.tablewView.ids = self.ids
self.tablewView.deleteModel(array: imgs) self.tablewView.deleteModel(array: imgs)
self.setDefaultPage() self.setDefaultPage()
} }
...@@ -123,6 +123,9 @@ class HomeInfoViewController:BaseViewController { ...@@ -123,6 +123,9 @@ class HomeInfoViewController:BaseViewController {
} }
} }
} }
} }
// 显示弹出框 // 显示弹出框
...@@ -483,7 +486,7 @@ class HomeInfoViewController:BaseViewController { ...@@ -483,7 +486,7 @@ class HomeInfoViewController:BaseViewController {
extension UIViewController{ 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 let permissionView = Bundle.main.loadNibNamed("PMPermissionView", owner: nil)?.last as! PMPermissionView
permissionView.frame = frame permissionView.frame = frame
self.view.addSubview(permissionView) self.view.addSubview(permissionView)
......
...@@ -681,29 +681,35 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -681,29 +681,35 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel.map{$0.localIdentifier}, options: nil) let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: self.selectedModel.map{$0.localIdentifier}, options: nil)
let fileSize = FileTool().calculateTotalAssetSize(fetchResult: fetchResult) let fileSize = FileTool().calculateTotalAssetSize(fetchResult: fetchResult)
PMLoadingHUD.share.show() PMLoadingHUD.share.show()
PHPhotoLibrary.shared().performChanges ({
PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration) CATransaction.begin()
}){ success, error in CATransaction.setCompletionBlock {
if(success){ PHPhotoLibrary.shared().performChanges ({
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { PHAssetChangeRequest.deleteAssets(fetchResult as NSFastEnumeration)
PMLoadingHUD.share.disMiss() }){ success, error in
print("删除文件成功") if(success){
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
if isAfterAdv == false { PMLoadingHUD.share.disMiss()
self.updateFreeTimes() 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()
} }
// 删除成功页面 // 删除成功页面
......
...@@ -102,7 +102,7 @@ extension HomeCollectionViewHeader{ ...@@ -102,7 +102,7 @@ extension HomeCollectionViewHeader{
// 设置整体文本样式 // 设置整体文本样式
let fullTextAttributes: [NSAttributedString.Key: Any] = [ let fullTextAttributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 12, weight: .regular), .font: UIFont.systemFont(ofSize: 14, weight: .regular),
.foregroundColor: UIColor(red: 0.4, green: 0.4, blue: 0.4,alpha:1) .foregroundColor: UIColor(red: 0.4, green: 0.4, blue: 0.4,alpha:1)
] ]
attributedText.addAttributes(fullTextAttributes, range: NSRange(location: 0, length: text.count)) attributedText.addAttributes(fullTextAttributes, range: NSRange(location: 0, length: text.count))
...@@ -111,8 +111,8 @@ extension HomeCollectionViewHeader{ ...@@ -111,8 +111,8 @@ extension HomeCollectionViewHeader{
if let range1 = text.range(of: countString) { if let range1 = text.range(of: countString) {
let nsRange1 = NSRange(range1, in: text) let nsRange1 = NSRange(range1, in: text)
attributedText.addAttributes([ attributedText.addAttributes([
.foregroundColor: UIColor.colorWithHex(hexStr: black6Color), .foregroundColor: UIColor.colorWithHex(hexStr: mColor),
.font:UIFont.systemFont(ofSize: 12, weight: .semibold) .font:UIFont.systemFont(ofSize: 14, weight: .semibold)
], range: nsRange1) ], range: nsRange1)
} }
...@@ -120,8 +120,8 @@ extension HomeCollectionViewHeader{ ...@@ -120,8 +120,8 @@ extension HomeCollectionViewHeader{
if let range2 = text.range(of: fileSizeString) { if let range2 = text.range(of: fileSizeString) {
let nsRange2 = NSRange(range2, in: text) let nsRange2 = NSRange(range2, in: text)
attributedText.addAttributes([ attributedText.addAttributes([
.font:UIFont.systemFont(ofSize: 12, weight: .semibold), .font:UIFont.systemFont(ofSize: 14, weight: .semibold),
.foregroundColor: UIColor.colorWithHex(hexStr: black6Color) .foregroundColor: UIColor.colorWithHex(hexStr: mColor)
], range: nsRange2) ], range: nsRange2)
} }
return attributedText return attributedText
......
...@@ -302,20 +302,16 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -302,20 +302,16 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
if indexPath.section == 0 { if indexPath.section == 0 {
let model = viewModel.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row] let model = viewModel.headerGroup[indexPath.row] //model?.titleModelArray[indexPath.row]
if model.assets.count > 0 { if model.assets.count > 0 {
return (model.assets.first?.count ?? 0) > 2 ? ((collection.width - marginLR - 20) / 2.5) + 64 : ((collection.width - 2 * marginLR - 10) / 2) + 64 return (model.assets.first?.count ?? 0) > 2 ? ((collection.width - marginLR - 20) / 2.2) + 64 : ((collection.width - 2 * marginLR - 10) / 2) + 64
}else{ }else{
return 52 return 38
} }
}else { }else {
let model = viewModel.cardGroup[indexPath.row] //model?.otherModelArray[indexPath.row] let model = viewModel.cardGroup[indexPath.row] //model?.otherModelArray[indexPath.row]
return itemWidth + 12 + UILabel.getSizeWith(font: UIFont.systemFont(ofSize: 16, weight: .bold),lineSpacing: 5, width: itemWidth - 32, numberOfLines: 0, content: model.folderName).height return itemWidth + 12 + UILabel.getSizeWith(font: UIFont.systemFont(ofSize: 16, weight: .bold),lineSpacing: 5, width: itemWidth - 32, numberOfLines: 0, content: model.folderName).height
} }
} }
...@@ -343,7 +339,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol ...@@ -343,7 +339,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
switch section { switch section {
case 1: case 1:
return 11 return 5
default: default:
return 0 return 0
...@@ -446,7 +442,7 @@ extension HomeView{ ...@@ -446,7 +442,7 @@ extension HomeView{
// 设置整体文本样式 // 设置整体文本样式
let fullTextAttributes: [NSAttributedString.Key: Any] = [ let fullTextAttributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 12, weight: .regular), .font: UIFont.systemFont(ofSize: 14, weight: .regular),
.foregroundColor: UIColor(red: 0.4, green: 0.4, blue: 0.4,alpha:1) .foregroundColor: UIColor(red: 0.4, green: 0.4, blue: 0.4,alpha:1)
] ]
attributedText.addAttributes(fullTextAttributes, range: NSRange(location: 0, length: text.count)) attributedText.addAttributes(fullTextAttributes, range: NSRange(location: 0, length: text.count))
...@@ -455,8 +451,8 @@ extension HomeView{ ...@@ -455,8 +451,8 @@ extension HomeView{
if let range1 = text.range(of: countString) { if let range1 = text.range(of: countString) {
let nsRange1 = NSRange(range1, in: text) let nsRange1 = NSRange(range1, in: text)
attributedText.addAttributes([ attributedText.addAttributes([
.foregroundColor: UIColor.colorWithHex(hexStr: black6Color), .foregroundColor: UIColor.colorWithHex(hexStr: mColor),
.font:UIFont.systemFont(ofSize: 12, weight: .semibold) .font:UIFont.systemFont(ofSize: 14, weight: .regular)
], range: nsRange1) ], range: nsRange1)
} }
...@@ -464,8 +460,8 @@ extension HomeView{ ...@@ -464,8 +460,8 @@ extension HomeView{
if let range2 = text.range(of: fileSizeString) { if let range2 = text.range(of: fileSizeString) {
let nsRange2 = NSRange(range2, in: text) let nsRange2 = NSRange(range2, in: text)
attributedText.addAttributes([ attributedText.addAttributes([
.font:UIFont.systemFont(ofSize: 12, weight: .semibold), .font:UIFont.systemFont(ofSize: 14, weight: .regular),
.foregroundColor: UIColor.colorWithHex(hexStr: black6Color) .foregroundColor: UIColor.colorWithHex(hexStr: mColor)
], range: nsRange2) ], range: nsRange2)
} }
return attributedText return attributedText
......
...@@ -17,7 +17,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -17,7 +17,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
let iv = UIImageView() let iv = UIImageView()
iv.contentMode = .scaleAspectFill iv.contentMode = .scaleAspectFill
iv.clipsToBounds = true iv.clipsToBounds = true
iv.layer.cornerRadius = 8 iv.layer.cornerRadius = 12
iv.backgroundColor = .clear iv.backgroundColor = .clear
return iv return iv
}() }()
...@@ -25,8 +25,8 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -25,8 +25,8 @@ class HomeOtherCollectionCell: UICollectionViewCell {
private let infoBackView: UIView = { private let infoBackView: UIView = {
let iv = UIView() let iv = UIView()
iv.clipsToBounds = true iv.clipsToBounds = true
iv.layer.cornerRadius = 8 iv.layer.cornerRadius = 12
iv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.4) iv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
return iv return iv
}() }()
...@@ -34,7 +34,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -34,7 +34,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
public var countLabel: UILabel = { public var countLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .white label.textColor = .white
label.font = .systemFont(ofSize: 14, weight: .medium) label.font = .systemFont(ofSize: 14, weight: .bold)
label.textAlignment = .left label.textAlignment = .left
return label return label
}() }()
...@@ -42,7 +42,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -42,7 +42,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
let sizeLabel: UILabel = { let sizeLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .white label.textColor = .white
label.font = .systemFont(ofSize: 10, weight: .medium) label.font = .systemFont(ofSize: 10, weight: .regular)
label.textAlignment = .left label.textAlignment = .left
return label return label
}() }()
...@@ -57,7 +57,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -57,7 +57,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
private let titleLabel: UILabel = { private let titleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .systemFont(ofSize: 16, weight: .bold) label.font = .systemFont(ofSize: 18, weight: .semibold)
label.textColor = UIColor.colorWithHex(hexStr: black3Color) label.textColor = UIColor.colorWithHex(hexStr: black3Color)
label.textAlignment = .left label.textAlignment = .left
label.numberOfLines = 0 label.numberOfLines = 0
...@@ -342,9 +342,9 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -342,9 +342,9 @@ class HomeOtherCollectionCell: UICollectionViewCell {
imageView.snp.makeConstraints { make in imageView.snp.makeConstraints { make in
make.top.equalTo(self.titleLabel.snp.bottom).offset(8) make.top.equalTo(self.titleLabel.snp.bottom).offset(8)
make.left.equalToSuperview().offset(16) make.left.equalToSuperview().offset(8)
make.width.equalToSuperview().offset(-32) make.width.equalToSuperview().offset(-16)
make.height.equalTo(self.width - 32) make.height.equalTo(self.width - 16)
} }
self.infoBackView.snp.makeConstraints { make in self.infoBackView.snp.makeConstraints { make in
...@@ -361,8 +361,8 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -361,8 +361,8 @@ class HomeOtherCollectionCell: UICollectionViewCell {
titleLabel.snp.makeConstraints { make in titleLabel.snp.makeConstraints { make in
make.left.top.equalToSuperview().offset(16) make.left.top.equalToSuperview().offset(8)
make.width.equalToSuperview().offset(-32) make.width.equalToSuperview().offset(-16)
} }
self.countLabel.snp.makeConstraints { make in self.countLabel.snp.makeConstraints { make in
...@@ -377,7 +377,7 @@ class HomeOtherCollectionCell: UICollectionViewCell { ...@@ -377,7 +377,7 @@ class HomeOtherCollectionCell: UICollectionViewCell {
} }
self.moreImageView.snp.makeConstraints { make in self.moreImageView.snp.makeConstraints { make in
make.width.height.equalTo(20) make.width.height.equalTo(20)
make.right.equalToSuperview().offset(-12) make.left.equalTo(countLabel.snp.right).offset(7)
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
} }
} }
......
...@@ -46,7 +46,6 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -46,7 +46,6 @@ class HomeTitleCollectionCell:UICollectionViewCell {
self.layer.cornerRadius = 12 self.layer.cornerRadius = 12
self.layer.masksToBounds = true self.layer.masksToBounds = true
titleLabel = UILabel() titleLabel = UILabel()
titleLabel.font = UIFont.systemFont(ofSize: 18, weight: .bold) titleLabel.font = UIFont.systemFont(ofSize: 18, weight: .bold)
titleLabel.textColor = UIColor.colorWithHex(hexStr: black3Color) titleLabel.textColor = UIColor.colorWithHex(hexStr: black3Color)
...@@ -57,7 +56,7 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -57,7 +56,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
let flowlayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout() let flowlayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
flowlayout.scrollDirection = .horizontal flowlayout.scrollDirection = .horizontal
flowlayout.minimumLineSpacing = 10 flowlayout.minimumLineSpacing = 4
collectionView = UICollectionView.init(frame: CGRectMake(0, 0 , ScreenW , ScreenH), collectionViewLayout: flowlayout) collectionView = UICollectionView.init(frame: CGRectMake(0, 0 , ScreenW , ScreenH), collectionViewLayout: flowlayout)
collectionView?.backgroundColor = .clear collectionView?.backgroundColor = .clear
...@@ -67,7 +66,7 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -67,7 +66,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
collectionView?.showsVerticalScrollIndicator = false collectionView?.showsVerticalScrollIndicator = false
collectionView?.register(ImageCollectionCell.self, forCellWithReuseIdentifier: ImageCollectionCell.identifiers) collectionView?.register(ImageCollectionCell.self, forCellWithReuseIdentifier: ImageCollectionCell.identifiers)
collectionView?.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: marginLR) collectionView?.contentInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: marginLR)
collectionView?.dataSource = self collectionView?.dataSource = self
collectionView?.delegate = self collectionView?.delegate = self
...@@ -157,7 +156,7 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -157,7 +156,7 @@ class HomeTitleCollectionCell:UICollectionViewCell {
titleLabel.snp.makeConstraints({ make in titleLabel.snp.makeConstraints({ make in
make.top.left.equalTo(16) make.top.left.equalTo(8)
}) })
titleLabel.sizeToFit() titleLabel.sizeToFit()
...@@ -171,16 +170,16 @@ class HomeTitleCollectionCell:UICollectionViewCell { ...@@ -171,16 +170,16 @@ class HomeTitleCollectionCell:UICollectionViewCell {
fileLabel?.sizeToFit() fileLabel?.sizeToFit()
collectionView?.snp.makeConstraints({ make in collectionView?.snp.makeConstraints({ make in
make.left.equalTo(16) make.left.equalTo(8)
make.bottom.equalTo(0) make.bottom.equalTo(0)
make.right.equalTo(-16) make.right.equalTo(-8)
make.top.equalTo(titleLabel.snp.bottom).offset(13) make.top.equalTo(titleLabel.snp.bottom).offset(0)
}) })
nextImage?.snp.makeConstraints({ make in nextImage?.snp.makeConstraints({ make in
make.centerY.equalTo(fileLabel!) make.centerY.equalTo(fileLabel!)
make.right.equalTo(-12) make.right.equalToSuperview().inset(12)
make.width.height.equalTo(20) make.width.height.equalTo(20)
}) })
} }
...@@ -205,13 +204,13 @@ extension HomeTitleCollectionCell:UICollectionViewDelegate,UICollectionViewDataS ...@@ -205,13 +204,13 @@ extension HomeTitleCollectionCell:UICollectionViewDelegate,UICollectionViewDataS
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
// 计算 cell 宽度 // 计算 cell 宽度
let width = max(0, collectionView.height - 18) // 使用实际的宽度计算方法 let width = max(0, collectionView.height - 16) // 使用实际的宽度计算方法
let height = max(0,collectionView.height - 18) // 使用实际的高度计算方法 let height = max(0, collectionView.height - 16) // 使用实际的高度计算方法
return CGSize(width:width, height: height) // 宽高相等,形成网格 return CGSize(width:width, height: height) // 宽高相等,形成网格
} }
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 10 // 设置列间距 return 4 // 设置列间距
} }
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
homeTititlAction(1) homeTititlAction(1)
......
...@@ -84,7 +84,7 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -84,7 +84,7 @@ class HomeVideoCoverCell: UICollectionViewCell {
let iv = UIImageView() let iv = UIImageView()
iv.contentMode = .scaleAspectFill iv.contentMode = .scaleAspectFill
iv.clipsToBounds = true iv.clipsToBounds = true
iv.layer.cornerRadius = 8 iv.layer.cornerRadius = 12
iv.backgroundColor = .clear iv.backgroundColor = .clear
return iv return iv
}() }()
...@@ -92,8 +92,8 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -92,8 +92,8 @@ class HomeVideoCoverCell: UICollectionViewCell {
private let infoBackView: UIView = { private let infoBackView: UIView = {
let iv = UIView() let iv = UIView()
iv.clipsToBounds = true iv.clipsToBounds = true
iv.layer.cornerRadius = 8 iv.layer.cornerRadius = 12
iv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.4) iv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
return iv return iv
}() }()
...@@ -101,7 +101,7 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -101,7 +101,7 @@ class HomeVideoCoverCell: UICollectionViewCell {
public var countLabel: UILabel = { public var countLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .white label.textColor = .white
label.font = .systemFont(ofSize: 14, weight: .medium) label.font = .systemFont(ofSize: 14, weight: .bold)
label.textAlignment = .left label.textAlignment = .left
return label return label
}() }()
...@@ -109,7 +109,7 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -109,7 +109,7 @@ class HomeVideoCoverCell: UICollectionViewCell {
let sizeLabel: UILabel = { let sizeLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.textColor = .white label.textColor = .white
label.font = .systemFont(ofSize: 10, weight: .medium) label.font = .systemFont(ofSize: 10, weight: .regular)
label.textAlignment = .left label.textAlignment = .left
return label return label
}() }()
...@@ -124,7 +124,7 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -124,7 +124,7 @@ class HomeVideoCoverCell: UICollectionViewCell {
private let titleLabel: UILabel = { private let titleLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .systemFont(ofSize: 16, weight: .bold) label.font = .systemFont(ofSize: 18, weight: .semibold)
label.textColor = UIColor.colorWithHex(hexStr: black3Color) label.textColor = UIColor.colorWithHex(hexStr: black3Color)
label.textAlignment = .left label.textAlignment = .left
label.numberOfLines = 0 label.numberOfLines = 0
...@@ -138,9 +138,9 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -138,9 +138,9 @@ class HomeVideoCoverCell: UICollectionViewCell {
imageView.snp.makeConstraints { make in imageView.snp.makeConstraints { make in
make.top.equalTo(self.titleLabel.snp.bottom).offset(8) make.top.equalTo(self.titleLabel.snp.bottom).offset(8)
make.left.equalToSuperview().offset(16) make.left.equalToSuperview().offset(8)
make.width.equalToSuperview().offset(-32) make.width.equalToSuperview().offset(-16)
make.height.equalTo(self.width - 32) make.height.equalTo(self.width - 16)
} }
self.infoBackView.snp.makeConstraints { make in self.infoBackView.snp.makeConstraints { make in
...@@ -151,8 +151,8 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -151,8 +151,8 @@ class HomeVideoCoverCell: UICollectionViewCell {
titleLabel.snp.makeConstraints { make in titleLabel.snp.makeConstraints { make in
make.left.top.equalToSuperview().offset(16) make.left.top.equalToSuperview().offset(8)
make.width.equalToSuperview().offset(-32) make.width.equalToSuperview().offset(-16)
} }
self.countLabel.snp.makeConstraints { make in self.countLabel.snp.makeConstraints { make in
...@@ -167,7 +167,7 @@ class HomeVideoCoverCell: UICollectionViewCell { ...@@ -167,7 +167,7 @@ class HomeVideoCoverCell: UICollectionViewCell {
} }
self.moreImageView.snp.makeConstraints { make in self.moreImageView.snp.makeConstraints { make in
make.width.height.equalTo(20) make.width.height.equalTo(20)
make.right.equalToSuperview().offset(-12) make.left.equalTo(countLabel.snp.right).offset(7)
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
} }
......
...@@ -437,13 +437,13 @@ class HomePayView:UIView { ...@@ -437,13 +437,13 @@ class HomePayView:UIView {
make.left.equalTo(16) make.left.equalTo(16)
make.right.equalTo(-16) make.right.equalTo(-16)
make.top.equalTo(subTitle.snp.bottom).offset(8.RH()) make.top.equalTo(subTitle.snp.bottom).offset(8.RH())
make.bottom.equalToSuperview().offset(-16) // make.bottom.equalToSuperview().offset(-16)
} }
tipsView.snp.makeConstraints { make in tipsView.snp.makeConstraints { make in
make.top.equalTo(titleLabel2!.snp.bottom).offset(230.RH()) make.top.equalTo(titleLabel2!.snp.bottom).offset(230.RH())
make.left.right.equalToSuperview().inset(marginLR) make.left.right.equalToSuperview().inset(marginLR)
// make.height.equalTo(110.RH()) make.height.equalTo(130.RH())
} }
payDueView.snp.makeConstraints { make in payDueView.snp.makeConstraints { make in
......
...@@ -18,12 +18,17 @@ class PMLoadingHUD{ ...@@ -18,12 +18,17 @@ class PMLoadingHUD{
return loadingView 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."){ func show(_ title:String = "Deleting...",_ subTitle:String = "Please wait on the screen. This might take several minutes."){
disMiss() disMiss()
DispatchQueue.main.async { DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView) cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView) cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle) self.loadingView.setTitleAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play() self.loadingView.animationView.play()
} }
} }
...@@ -33,8 +38,8 @@ class PMLoadingHUD{ ...@@ -33,8 +38,8 @@ class PMLoadingHUD{
DispatchQueue.main.async { DispatchQueue.main.async {
cWindow?.addSubview(self.loadingView) cWindow?.addSubview(self.loadingView)
cWindow?.bringSubviewToFront(self.loadingView) cWindow?.bringSubviewToFront(self.loadingView)
self.loadingView.setTitleaAndSubTitle(title: title, subTitle: subTitle) self.loadingView.setTitleAndSubTitle(title: title, subTitle: subTitle)
self.loadingView.animationView.play() self.loadingView.animationView.play()
} }
} }
...@@ -52,24 +57,29 @@ class PMLoadingHUD{ ...@@ -52,24 +57,29 @@ class PMLoadingHUD{
} }
class PMLoadingView: UIView { 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) { override init(frame: CGRect) {
super.init(frame: frame) 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) self.backgroundColor = UIColor.black.withAlphaComponent(0.8)
// 先创建空的动画视图,不加载内容
animationView = LottieAnimationView()
animationView.loopMode = .loop
addSubview(animationView) addSubview(animationView)
animationView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
make.width.equalTo(300)
make.height.equalTo(200)
}
title = UILabel() title = UILabel()
title.text = "Deleting..." title.text = "Deleting..."
...@@ -85,37 +95,63 @@ class PMLoadingView: UIView { ...@@ -85,37 +95,63 @@ class PMLoadingView: UIView {
subtitle.font = UIFont.systemFont(ofSize: 18, weight: .semibold) subtitle.font = UIFont.systemFont(ofSize: 18, weight: .semibold)
addSubview(subtitle) 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 title.snp.makeConstraints { make in
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
make.top.equalTo(animationView.snp.bottom).offset(-80) make.top.equalTo(animationView.snp.bottom).offset(-80)
} }
subtitle.snp.makeConstraints { make in subtitle.snp.makeConstraints { make in
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
make.width.equalTo(250) make.width.equalTo(250)
make.top.equalTo(title.snp.bottom).offset(2) make.top.equalTo(title.snp.bottom).offset(2)
} }
} }
required init?(coder: NSCoder) { private func loadAnimationAsync() {
fatalError("init(coder:) has not been implemented") 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()
}
}
}
} }
func setTitleAndSubTitle(title: String, subTitle: String) {
lazy var animationView : LottieAnimationView = {
let animationView = LottieAnimationView(name: "PMAnimationLoaing")
animationView.loopMode = .loop
return animationView
}()
func setTitleaAndSubTitle(title:String,subTitle:String){
self.title.text = title self.title.text = title
self.subtitle.text = subTitle self.subtitle.text = subTitle
} }
// 重写添加到父视图的方法,在视图显示时播放动画
// override func didMoveToSuperview() {
// super.didMoveToSuperview()
// if isAnimationLoaded && superview != nil {
// animationView.play()
// }
// }
} }
...@@ -34,7 +34,7 @@ class SettingNormalCell : UITableViewCell { ...@@ -34,7 +34,7 @@ class SettingNormalCell : UITableViewCell {
lazy var fLabel : UILabel = { lazy var fLabel : UILabel = {
let label = UILabel(); let label = UILabel();
label.text = "ceshi" label.text = "ceshi"
label.font = UIFont.systemFont(ofSize: 14, weight: .bold) label.font = UIFont.systemFont(ofSize: 16, weight: .semibold)
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1) label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.textAlignment = .left label.textAlignment = .left
return label return label
...@@ -64,7 +64,7 @@ class SettingNormalCell : UITableViewCell { ...@@ -64,7 +64,7 @@ class SettingNormalCell : UITableViewCell {
} }
self.fLabel.snp.makeConstraints { make in self.fLabel.snp.makeConstraints { make in
make.left.equalTo(self.logoView.snp.right).offset(4) make.left.equalTo(self.logoView.snp.right).offset(16)
make.top.equalToSuperview() make.top.equalToSuperview()
make.height.equalTo(60) make.height.equalTo(60)
make.bottom.equalToSuperview() make.bottom.equalToSuperview()
......
...@@ -55,7 +55,7 @@ class SettingSwitchCell : UITableViewCell { ...@@ -55,7 +55,7 @@ class SettingSwitchCell : UITableViewCell {
lazy var fLabel : UILabel = { lazy var fLabel : UILabel = {
let label = UILabel(); let label = UILabel();
label.text = "ceshi" label.text = "ceshi"
label.font = UIFont.systemFont(ofSize: 14, weight: .bold) label.font = UIFont.systemFont(ofSize: 16, weight: .semibold)
label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1) label.textColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)
label.textAlignment = .left label.textAlignment = .left
return label return label
...@@ -86,7 +86,7 @@ class SettingSwitchCell : UITableViewCell { ...@@ -86,7 +86,7 @@ class SettingSwitchCell : UITableViewCell {
} }
self.fLabel.snp.makeConstraints { make in self.fLabel.snp.makeConstraints { make in
make.left.equalTo(self.logoView.snp.right).offset(4) make.left.equalTo(self.logoView.snp.right).offset(16)
make.top.equalToSuperview() make.top.equalToSuperview()
make.height.equalTo(60) make.height.equalTo(60)
make.width.equalTo(206) make.width.equalTo(206)
......
...@@ -60,3 +60,4 @@ extension UIViewController { ...@@ -60,3 +60,4 @@ extension UIViewController {
} }
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