Commit b3e20e2e authored by Steven杜宇's avatar Steven杜宇

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

parents 87527580 55a3adf9
...@@ -217,6 +217,12 @@ ...@@ -217,6 +217,12 @@
044EE2532C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2522C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift */; }; 044EE2532C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2522C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift */; };
044EE2562C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2552C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift */; }; 044EE2562C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2552C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift */; };
044EE2592C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2582C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift */; }; 044EE2592C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044EE2582C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift */; };
044F392C2CB54C5E007CA277 /* YHHKVisaRenewalPaymentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F392B2CB54C5E007CA277 /* YHHKVisaRenewalPaymentVC.swift */; };
044F392E2CB55050007CA277 /* YHHKVisaRenewalPaymentStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F392D2CB55050007CA277 /* YHHKVisaRenewalPaymentStepView.swift */; };
044F39302CB55D5E007CA277 /* YHDashLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F392F2CB55D5E007CA277 /* YHDashLineView.swift */; };
044F39322CB64CC0007CA277 /* YHBottomPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F39312CB64CC0007CA277 /* YHBottomPresentationController.swift */; };
044F39342CB6507D007CA277 /* YHVisaRenewalGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F39332CB6507D007CA277 /* YHVisaRenewalGuideVC.swift */; };
044F39362CB6574D007CA277 /* YHVisaRenewalGuideHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044F39352CB6574D007CA277 /* YHVisaRenewalGuideHeaderCell.swift */; };
04506F552C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */; }; 04506F552C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */; };
045A08C02C37ABF500BCBABA /* YHSegmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */; }; 045A08C02C37ABF500BCBABA /* YHSegmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */; };
045A08C22C37EB8B00BCBABA /* YHMyFileListNoneCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */; }; 045A08C22C37EB8B00BCBABA /* YHMyFileListNoneCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */; };
...@@ -1070,6 +1076,12 @@ ...@@ -1070,6 +1076,12 @@
044EE2522C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesExampleShareViewController.swift; sourceTree = "<group>"; }; 044EE2522C9565FF00A2FE3A /* YHResignGuidelinesExampleShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesExampleShareViewController.swift; sourceTree = "<group>"; };
044EE2552C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesModel.swift; sourceTree = "<group>"; }; 044EE2552C9D0E4500A2FE3A /* YHResignGuidelinesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesModel.swift; sourceTree = "<group>"; };
044EE2582C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesViewModel.swift; sourceTree = "<group>"; }; 044EE2582C9D0F2800A2FE3A /* YHResignGuidelinesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignGuidelinesViewModel.swift; sourceTree = "<group>"; };
044F392B2CB54C5E007CA277 /* YHHKVisaRenewalPaymentVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHHKVisaRenewalPaymentVC.swift; sourceTree = "<group>"; };
044F392D2CB55050007CA277 /* YHHKVisaRenewalPaymentStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHHKVisaRenewalPaymentStepView.swift; sourceTree = "<group>"; };
044F392F2CB55D5E007CA277 /* YHDashLineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHDashLineView.swift; sourceTree = "<group>"; };
044F39312CB64CC0007CA277 /* YHBottomPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBottomPresentationController.swift; sourceTree = "<group>"; };
044F39332CB6507D007CA277 /* YHVisaRenewalGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHVisaRenewalGuideVC.swift; sourceTree = "<group>"; };
044F39352CB6574D007CA277 /* YHVisaRenewalGuideHeaderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHVisaRenewalGuideHeaderCell.swift; sourceTree = "<group>"; };
04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFamilyMemberInfoCell.swift; sourceTree = "<group>"; }; 04506F542C6F57E600738EA1 /* YHFamilyMemberInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFamilyMemberInfoCell.swift; sourceTree = "<group>"; };
045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHSegmentView.swift; sourceTree = "<group>"; }; 045A08BF2C37ABF500BCBABA /* YHSegmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHSegmentView.swift; sourceTree = "<group>"; };
045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileListNoneCell.swift; sourceTree = "<group>"; }; 045A08C12C37EB8B00BCBABA /* YHMyFileListNoneCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileListNoneCell.swift; sourceTree = "<group>"; };
...@@ -2147,6 +2159,7 @@ ...@@ -2147,6 +2159,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
04912F562CB6675D00CC3105 /* ResignInfoConfirm(续签信息确认) */, 04912F562CB6675D00CC3105 /* ResignInfoConfirm(续签信息确认) */,
044F39272CB54BB3007CA277 /* HongKongVisaRenewalPayment(续签在港缴费) */,
04F243322C957ED600DF2C74 /* HongKongImmigrationRecords(在港记录管理) */, 04F243322C957ED600DF2C74 /* HongKongImmigrationRecords(在港记录管理) */,
044EE24D2C955C4300A2FE3A /* ResignGuidelines(续期身份指引) */, 044EE24D2C955C4300A2FE3A /* ResignGuidelines(续期身份指引) */,
044EE2302C9290D800A2FE3A /* ResignCertificateManage(续期证件管理) */, 044EE2302C9290D800A2FE3A /* ResignCertificateManage(续期证件管理) */,
...@@ -2384,6 +2397,43 @@ ...@@ -2384,6 +2397,43 @@
path = VM; path = VM;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
044F39272CB54BB3007CA277 /* HongKongVisaRenewalPayment(续签在港缴费) */ = {
isa = PBXGroup;
children = (
044F392A2CB54C15007CA277 /* V */,
044F39292CB54C07007CA277 /* M */,
044F39282CB54C00007CA277 /* C */,
);
path = "HongKongVisaRenewalPayment(续签在港缴费)";
sourceTree = "<group>";
};
044F39282CB54C00007CA277 /* C */ = {
isa = PBXGroup;
children = (
044F392B2CB54C5E007CA277 /* YHHKVisaRenewalPaymentVC.swift */,
044F39332CB6507D007CA277 /* YHVisaRenewalGuideVC.swift */,
);
path = C;
sourceTree = "<group>";
};
044F39292CB54C07007CA277 /* M */ = {
isa = PBXGroup;
children = (
);
path = M;
sourceTree = "<group>";
};
044F392A2CB54C15007CA277 /* V */ = {
isa = PBXGroup;
children = (
044F392D2CB55050007CA277 /* YHHKVisaRenewalPaymentStepView.swift */,
044F39312CB64CC0007CA277 /* YHBottomPresentationController.swift */,
044F392F2CB55D5E007CA277 /* YHDashLineView.swift */,
044F39352CB6574D007CA277 /* YHVisaRenewalGuideHeaderCell.swift */,
);
path = V;
sourceTree = "<group>";
};
045EED972B9F171A0022A143 /* ServiceProcess(我的信息流程) */ = { 045EED972B9F171A0022A143 /* ServiceProcess(我的信息流程) */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -4912,6 +4962,7 @@ ...@@ -4912,6 +4962,7 @@
04F243682C9D670E00DF2C74 /* YHResignDocumentListModel.swift in Sources */, 04F243682C9D670E00DF2C74 /* YHResignDocumentListModel.swift in Sources */,
04FD85702C21646200BEF9C5 /* YHMyInterestTopicCell.swift in Sources */, 04FD85702C21646200BEF9C5 /* YHMyInterestTopicCell.swift in Sources */,
04F243742CA07C6C00DF2C74 /* YHCollectionViewLeftAlignedFlowLayout.swift in Sources */, 04F243742CA07C6C00DF2C74 /* YHCollectionViewLeftAlignedFlowLayout.swift in Sources */,
044F392C2CB54C5E007CA277 /* YHHKVisaRenewalPaymentVC.swift in Sources */,
04F243592C9C43A100DF2C74 /* YHHKRecordsEditButtonCell.swift in Sources */, 04F243592C9C43A100DF2C74 /* YHHKRecordsEditButtonCell.swift in Sources */,
A5CA3F542C744CAB00EB22F5 /* YHUploadCertificateDetailCell.swift in Sources */, A5CA3F542C744CAB00EB22F5 /* YHUploadCertificateDetailCell.swift in Sources */,
04A7BD172BA43A0F00BD35A2 /* YHMyDocumentsDetailViewModel.swift in Sources */, 04A7BD172BA43A0F00BD35A2 /* YHMyDocumentsDetailViewModel.swift in Sources */,
...@@ -5135,6 +5186,7 @@ ...@@ -5135,6 +5186,7 @@
045EEEAE2B9F171A0022A143 /* YHWorkHighlightsTableViewCell.swift in Sources */, 045EEEAE2B9F171A0022A143 /* YHWorkHighlightsTableViewCell.swift in Sources */,
A567E59A2BD7643D00D5D5A0 /* YHHomeKingKongBlockModel.swift in Sources */, A567E59A2BD7643D00D5D5A0 /* YHHomeKingKongBlockModel.swift in Sources */,
045EEF062B9F171A0022A143 /* YHFormItemQuestionsCell.swift in Sources */, 045EEF062B9F171A0022A143 /* YHFormItemQuestionsCell.swift in Sources */,
044F392E2CB55050007CA277 /* YHHKVisaRenewalPaymentStepView.swift in Sources */,
0419A09A2C48F87B00A5FCFA /* YHInvitationWithGiftsViewController.swift in Sources */, 0419A09A2C48F87B00A5FCFA /* YHInvitationWithGiftsViewController.swift in Sources */,
04F5F86E2C1AC351004A463C /* YHHKEventCenterViewController.swift in Sources */, 04F5F86E2C1AC351004A463C /* YHHKEventCenterViewController.swift in Sources */,
A567E5922BD7643D00D5D5A0 /* YHHomeWebViewModel.swift in Sources */, A567E5922BD7643D00D5D5A0 /* YHHomeWebViewModel.swift in Sources */,
...@@ -5358,6 +5410,7 @@ ...@@ -5358,6 +5410,7 @@
A5CA3F502C7447FB00EB22F5 /* YHUploadCertificateVC.swift in Sources */, A5CA3F502C7447FB00EB22F5 /* YHUploadCertificateVC.swift in Sources */,
04A7BD192BA441D400BD35A2 /* YHMyDocumentsUrlModel.swift in Sources */, 04A7BD192BA441D400BD35A2 /* YHMyDocumentsUrlModel.swift in Sources */,
04174D792BCD5B74000BA46D /* YHMessageSessionCell.swift in Sources */, 04174D792BCD5B74000BA46D /* YHMessageSessionCell.swift in Sources */,
044F39362CB6574D007CA277 /* YHVisaRenewalGuideHeaderCell.swift in Sources */,
04C85DE92C36BF49008B20D6 /* YHMyFileListFooterView.swift in Sources */, 04C85DE92C36BF49008B20D6 /* YHMyFileListFooterView.swift in Sources */,
045EEEA62B9F171A0022A143 /* YHCompanySelectViewController.swift in Sources */, 045EEEA62B9F171A0022A143 /* YHCompanySelectViewController.swift in Sources */,
0425E6462BA9678E00A5E763 /* YHSchemeHeadTotalScoreView.swift in Sources */, 0425E6462BA9678E00A5E763 /* YHSchemeHeadTotalScoreView.swift in Sources */,
...@@ -5398,6 +5451,7 @@ ...@@ -5398,6 +5451,7 @@
0418921F2C91BAAC00B9FB94 /* YHBaseDynamicCornerRadiusView.swift in Sources */, 0418921F2C91BAAC00B9FB94 /* YHBaseDynamicCornerRadiusView.swift in Sources */,
047AA3E02C4A63B2009C4554 /* YHLifeSectionView.swift in Sources */, 047AA3E02C4A63B2009C4554 /* YHLifeSectionView.swift in Sources */,
0430E67E2C75872E000511E2 /* YHAdopterOtherViewController.swift in Sources */, 0430E67E2C75872E000511E2 /* YHAdopterOtherViewController.swift in Sources */,
044F39302CB55D5E007CA277 /* YHDashLineView.swift in Sources */,
04174D772BCD5B74000BA46D /* YHMessageDetailListVC.swift in Sources */, 04174D772BCD5B74000BA46D /* YHMessageDetailListVC.swift in Sources */,
044D0BFE2C21649A00C5CF5E /* YHUserInformationModel.swift in Sources */, 044D0BFE2C21649A00C5CF5E /* YHUserInformationModel.swift in Sources */,
0430E67A2C757F13000511E2 /* YHAdoptedChinaTravelViewController.swift in Sources */, 0430E67A2C757F13000511E2 /* YHAdoptedChinaTravelViewController.swift in Sources */,
...@@ -5414,6 +5468,7 @@ ...@@ -5414,6 +5468,7 @@
045EEEF32B9F171A0022A143 /* YHFamilyMemberInfoListVC.swift in Sources */, 045EEEF32B9F171A0022A143 /* YHFamilyMemberInfoListVC.swift in Sources */,
04B4B8DC2C90696E00ED82BC /* YHResignDocumentManagementVC.swift in Sources */, 04B4B8DC2C90696E00ED82BC /* YHResignDocumentManagementVC.swift in Sources */,
F8BAADA52C4FCE9C0074D6C3 /* YHUatHelperViewModel.swift in Sources */, F8BAADA52C4FCE9C0074D6C3 /* YHUatHelperViewModel.swift in Sources */,
044F39342CB6507D007CA277 /* YHVisaRenewalGuideVC.swift in Sources */,
0445E6B42BEA15C4003C52F9 /* YHAppVersionManager.swift in Sources */, 0445E6B42BEA15C4003C52F9 /* YHAppVersionManager.swift in Sources */,
04CE1AD92C2AD91F001CB80A /* YHActivityDetailBottomView.swift in Sources */, 04CE1AD92C2AD91F001CB80A /* YHActivityDetailBottomView.swift in Sources */,
04EA230C2BB5199D009DA928 /* YHDocumentToActionTableViewCell.swift in Sources */, 04EA230C2BB5199D009DA928 /* YHDocumentToActionTableViewCell.swift in Sources */,
...@@ -5481,6 +5536,7 @@ ...@@ -5481,6 +5536,7 @@
A580371E2BAD784B0031C312 /* YHMySchemeViewModel.swift in Sources */, A580371E2BAD784B0031C312 /* YHMySchemeViewModel.swift in Sources */,
0425E6482BA96B4100A5E763 /* YHSchemeHeadScoreItemView.swift in Sources */, 0425E6482BA96B4100A5E763 /* YHSchemeHeadScoreItemView.swift in Sources */,
04A271252BAC33BB00652B1B /* YHFilePreviewTool.swift in Sources */, 04A271252BAC33BB00652B1B /* YHFilePreviewTool.swift in Sources */,
044F39322CB64CC0007CA277 /* YHBottomPresentationController.swift in Sources */,
045EEEC32B9F171A0022A143 /* YHOtherResidenceFillView.swift in Sources */, 045EEEC32B9F171A0022A143 /* YHOtherResidenceFillView.swift in Sources */,
045EEE792B9F171A0022A143 /* YHPreviewViewModel.swift in Sources */, 045EEE792B9F171A0022A143 /* YHPreviewViewModel.swift in Sources */,
A54A07C92C7F478200F749AB /* YHTravelHKDLGuideSheetView.swift in Sources */, A54A07C92C7F478200F749AB /* YHTravelHKDLGuideSheetView.swift in Sources */,
......
...@@ -156,8 +156,8 @@ extension YHInvatationShareViewController { ...@@ -156,8 +156,8 @@ extension YHInvatationShareViewController {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
DispatchQueue.main.async { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
YHHUD.flash(message: "保存成功") YHHUD.flash(message: "保存成功")
} }
} else { } else {
......
...@@ -191,7 +191,7 @@ class YHConsultantQRCodeView: UIView { ...@@ -191,7 +191,7 @@ class YHConsultantQRCodeView: UIView {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
DispatchQueue.main.sync { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil) UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil)
} }
} else { } else {
......
...@@ -233,7 +233,7 @@ extension YHFileListViewController { ...@@ -233,7 +233,7 @@ extension YHFileListViewController {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
DispatchQueue.main.sync { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil) UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil)
} }
} else { } else {
......
...@@ -489,7 +489,7 @@ extension YHMyFileListViewController { ...@@ -489,7 +489,7 @@ extension YHMyFileListViewController {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
DispatchQueue.main.sync { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil) UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil)
} }
} else { } else {
......
...@@ -23,8 +23,8 @@ class YHHKRecordsSummaryVC: YHBaseViewController { ...@@ -23,8 +23,8 @@ class YHHKRecordsSummaryVC: YHBaseViewController {
private lazy var datas: [YHHKRecordSectionType] = [] private lazy var datas: [YHHKRecordSectionType] = []
private lazy var tableView: YHGestureTableView = { private lazy var tableView: UITableView = {
let view = YHGestureTableView(frame: .zero, style: .plain) let view = UITableView(frame: .zero, style: .plain)
view.backgroundColor = .clear view.backgroundColor = .clear
view.separatorStyle = .none view.separatorStyle = .none
view.rowHeight = UITableView.automaticDimension view.rowHeight = UITableView.automaticDimension
......
//
// YHHKVisaRenewalPaymentVC.swift
// galaxy
//
// Created by alexzzw on 2024/10/8.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKVisaRenewalPaymentVC: YHBaseViewController {
private lazy var stepView: YHHKVisaRenewalPaymentStepView = {
let view = YHHKVisaRenewalPaymentStepView.init(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 74))
return view
}()
private lazy var tableView: UITableView = {
let view = UITableView(frame: .zero, style: .plain)
view.backgroundColor = .clear
view.separatorStyle = .none
view.rowHeight = UITableView.automaticDimension
view.estimatedRowHeight = 52.0
view.dataSource = self
view.delegate = self
view.showsVerticalScrollIndicator = false
//view.register(YHHKRecordsHeaderCell.self, forCellReuseIdentifier: YHHKRecordsHeaderCell.cellReuseIdentifier)
return view
}()
private let orderId: Int
init(orderId: Int) {
self.orderId = orderId
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
}
extension YHHKVisaRenewalPaymentVC {
private func setupUI() {
gk_navTitle = "签证缴费"
gk_navBarAlpha = 1.0
gk_navBackgroundColor = .white
view.backgroundColor = UIColor.contentBkgColor
view.addSubview(stepView)
view.addSubview(tableView)
stepView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.height.equalTo(74)
}
tableView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(kMargin).priority(.high)
make.right.equalToSuperview().offset(-kMargin).priority(.high)
make.top.equalTo(stepView.snp.bottom)
make.bottom.equalToSuperview()
}
tableView.tableHeaderView = UIView(frame: CGRect.init(x: 0, y: 0, width: KScreenWidth, height: kMargin))
tableView.tableFooterView = UIView(frame: CGRect.init(x: 0, y: 0, width: KScreenWidth, height: kMargin))
}
}
extension YHHKVisaRenewalPaymentVC: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 16.0
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 0.01
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
return view
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()
return view
}
}
//
// YHVisaRenewalGuideVC.swift
// galaxy
//
// Created by alexzzw on 2024/10/9.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHVisaRenewalGuideVC: YHBaseViewController {
private lazy var tableView: UITableView = {
let view = UITableView(frame: .zero, style: .plain)
view.backgroundColor = .clear
view.separatorStyle = .none
view.rowHeight = UITableView.automaticDimension
view.estimatedRowHeight = 52.0
view.dataSource = self
view.delegate = self
view.showsVerticalScrollIndicator = false
view.register(YHHKRecordsHeaderCell.self, forCellReuseIdentifier: YHHKRecordsHeaderCell.cellReuseIdentifier)
return view
}()
private lazy var sureButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.setTitle("请上滑看完指引后操作(5s)", for: .disabled)
button.setTitle("我已知悉,确认", for: .normal)
button.setTitle("我已知悉,确认", for: .highlighted)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .highlighted)
button.addTarget(self, action: #selector(clickSureButton), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.backgroundColor = .brandMainColor
return button
}()
private lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
}
extension YHVisaRenewalGuideVC {
@objc private func clickSureButton() {
//
}
private func setupUI() {
gk_navBarAlpha = 0
gk_navigationBar.isHidden = true
view.backgroundColor = UIColor.white
view.addSubview(tableView)
view.addSubview(bottomView)
bottomView.addSubview(sureButton)
bottomView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.right.equalToSuperview()
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
make.height.equalTo(64)
}
sureButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(kMargin)
make.right.equalToSuperview().offset(-kMargin)
make.centerY.equalToSuperview()
make.height.equalTo(48)
}
tableView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.top.equalToSuperview()
make.bottom.equalTo(bottomView.snp.top)
}
tableView.tableFooterView = UIView(frame: CGRect.init(x: 0, y: 0, width: KScreenWidth, height: kMargin))
preferredContentSize = CGSize(width: KScreenWidth, height: KScreenHeight - k_Height_NavigationtBarAndStatuBar)
}
}
extension YHVisaRenewalGuideVC: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
}
//
// YHBottomPresentationController.swift
// galaxy
//
// Created by alexzzw on 2024/10/9.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHBottomPresentationController: UIPresentationController {
/*
let vc = UIViewController()
let pc = YHBottomPresentationController(presentedViewController: vc, presenting: self)
pc.customRadius = 12.0
vc.transitioningDelegate = pc
vc.closeButtonClickClosure = { [weak vc] in
vc?.dismiss(animated: true)
}
pc.dimmingViewTapAction = {
vc.dismiss(animated: true, completion: nil)
}
present(vc, animated: true, completion: nil)
*/
// MARK: - Properties
@IBInspectable public var customRadius: CGFloat = 8.0
@IBInspectable public var blurEffectAlpha: CGFloat = 0.5
public var dimmingViewTapAction: (() -> Void)?
private var presentationWrappingView: UIView?
private enum TransitionState {
case presenting
case dismissing
}
private struct Constants {
static let animationDuration: TimeInterval = 0.35
static let shadowOpacity: Float = 0.44
static let shadowRadius: CGFloat = 13.0
static let shadowOffset: CGSize = CGSize(width: 0, height: -6)
}
// MARK: - Lazy Properties
private lazy var dimmingView: UIView = {
let view = UIView()
view.backgroundColor = UIColor.black.withAlphaComponent(blurEffectAlpha)
view.isOpaque = false
view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dimmingViewTapped(_:))))
return view
}()
private lazy var visualEffectView: UIVisualEffectView = {
let effect = UIBlurEffect(style: .dark)
let view = UIVisualEffectView(effect: effect)
view.alpha = blurEffectAlpha
return view
}()
// MARK: - Initialization
override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
presentedViewController.modalPresentationStyle = .custom
}
// MARK: - Overrides
override var presentedView: UIView? {
return presentationWrappingView
}
override func presentationTransitionWillBegin() {
guard let containerView = containerView else { return }
let presentationWrapperView = createPresentationWrapperView()
presentationWrappingView = presentationWrapperView
setupDimmingView(in: containerView)
let transitionCoordinator = presentingViewController.transitionCoordinator
dimmingView.alpha = 0.0
transitionCoordinator?.animate(alongsideTransition: { [weak self] _ in
self?.dimmingView.alpha = 1
}, completion: nil)
}
override func presentationTransitionDidEnd(_ completed: Bool) {
if !completed {
presentationWrappingView = nil
dimmingView.removeFromSuperview()
}
}
override func dismissalTransitionWillBegin() {
let transitionCoordinator = presentingViewController.transitionCoordinator
transitionCoordinator?.animate(alongsideTransition: { [weak self] _ in
self?.dimmingView.alpha = 0
}, completion: nil)
}
override func dismissalTransitionDidEnd(_ completed: Bool) {
if completed {
presentationWrappingView = nil
dimmingView.removeFromSuperview()
}
}
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
super.preferredContentSizeDidChange(forChildContentContainer: container)
if container === presentedViewController {
containerView?.setNeedsLayout()
}
}
override func size(forChildContentContainer container: UIContentContainer, withParentContainerSize parentSize: CGSize) -> CGSize {
if container === presentedViewController {
return container.preferredContentSize
}
return super.size(forChildContentContainer: container, withParentContainerSize: parentSize)
}
override var frameOfPresentedViewInContainerView: CGRect {
guard let containerView = containerView else { return .zero }
let containerViewBounds = containerView.bounds
let presentedViewContentSize = size(forChildContentContainer: presentedViewController, withParentContainerSize: containerViewBounds.size)
var presentedViewControllerFrame = containerViewBounds
presentedViewControllerFrame.size.height = presentedViewContentSize.height
presentedViewControllerFrame.origin.y = containerViewBounds.maxY - presentedViewContentSize.height
return presentedViewControllerFrame
}
override func containerViewWillLayoutSubviews() {
super.containerViewWillLayoutSubviews()
dimmingView.frame = containerView?.bounds ?? .zero
presentationWrappingView?.frame = frameOfPresentedViewInContainerView
}
// MARK: - Private Methods
private func createPresentationWrapperView() -> UIView {
let wrapperView = UIView(frame: frameOfPresentedViewInContainerView)
wrapperView.layer.shadowOpacity = Constants.shadowOpacity
wrapperView.layer.shadowRadius = Constants.shadowRadius
wrapperView.layer.shadowOffset = Constants.shadowOffset
let roundedCornerView = createRoundedCornerView(in: wrapperView)
let presentedControllerWrapperView = createPresentedControllerWrapperView(in: roundedCornerView)
if let presentedView = super.presentedView {
presentedView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
presentedView.frame = presentedControllerWrapperView.bounds
presentedControllerWrapperView.addSubview(presentedView)
}
return wrapperView
}
private func createRoundedCornerView(in wrapperView: UIView) -> UIView {
let roundedCornerView = UIView(frame: wrapperView.bounds.inset(by: UIEdgeInsets(top: 0, left: 0, bottom: -customRadius, right: 0)))
roundedCornerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
roundedCornerView.layer.cornerRadius = customRadius
roundedCornerView.layer.masksToBounds = true
wrapperView.addSubview(roundedCornerView)
return roundedCornerView
}
private func createPresentedControllerWrapperView(in roundedCornerView: UIView) -> UIView {
let wrapperView = UIView(frame: roundedCornerView.bounds.inset(by: UIEdgeInsets(top: 0, left: 0, bottom: customRadius, right: 0)))
wrapperView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
roundedCornerView.addSubview(wrapperView)
return wrapperView
}
private func setupDimmingView(in containerView: UIView) {
dimmingView.frame = containerView.bounds
visualEffectView.frame = dimmingView.bounds
dimmingView.addSubview(visualEffectView)
visualEffectView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
containerView.addSubview(dimmingView)
}
// MARK: - Actions
@objc private func dimmingViewTapped(_: UITapGestureRecognizer) {
dimmingViewTapAction?()
}
}
// MARK: - UIViewControllerAnimatedTransitioning
extension YHBottomPresentationController: UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return transitionContext?.isAnimated == true ? Constants.animationDuration : 0
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let state: TransitionState = (transitionContext.viewController(forKey: .from) === presentingViewController) ? .presenting : .dismissing
guard let view = state == .presenting ? transitionContext.view(forKey: .to) : transitionContext.view(forKey: .from) else { return }
let initialFrame = view.frame
let finalFrame = state == .presenting ? transitionContext.finalFrame(for: presentedViewController) : initialFrame.offsetBy(dx: 0, dy: initialFrame.height)
view.frame = state == .presenting ? initialFrame : finalFrame
let animator = UIViewPropertyAnimator(duration: Constants.animationDuration, curve: .easeInOut) {
view.frame = state == .presenting ? finalFrame : initialFrame
}
animator.addCompletion { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
animator.startAnimation()
}
}
// MARK: - UIViewControllerTransitioningDelegate
extension YHBottomPresentationController: UIViewControllerTransitioningDelegate {
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
assert(presentedViewController === presented, "You didn't initialize \(self) with the correct presentedViewController. Expected \(presented), got \(presentedViewController).")
return self
}
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
}
//
// YHDashLineView.swift
// galaxy
//
// Created by alexzzw on 2024/10/8.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHDashLineView: UIView {
private var strokeColor: CGColor = UIColor(hex: 0x121A26, alpha: 0.12).cgColor
private var lineWidth: CGFloat = 1
private var lineDashPattern: [NSNumber] = [2, 2]
init(strokeColor: CGColor = UIColor(hex: 0x121A26, alpha: 0.12).cgColor, lineWidth: CGFloat = 1, lineDashPattern: [NSNumber] = [2, 2]) {
self.strokeColor = strokeColor
self.lineWidth = lineWidth
self.lineDashPattern = lineDashPattern
super.init(frame: CGRect.zero)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
// 移除之前的层,避免重复添加
layer.sublayers?.filter { $0 is CAShapeLayer }.forEach { $0.removeFromSuperlayer() }
let shapeLayer = CAShapeLayer()
shapeLayer.strokeColor = strokeColor
shapeLayer.lineWidth = lineWidth
shapeLayer.lineDashPattern = lineDashPattern // 实线长度,间隔长度
let path = CGMutablePath()
path.move(to: CGPoint(x: 0, y: bounds.midY))
path.addLine(to: CGPoint(x: bounds.width, y: bounds.midY))
shapeLayer.path = path
layer.addSublayer(shapeLayer)
}
}
//
// YHHKVisaRenewalPaymentStepView.swift
// galaxy
//
// Created by alexzzw on 2024/10/8.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKVisaRenewalPaymentStepView: UIView {
private let stepNames: [String] = ["确认在港", "复制档案号", "官网缴费", "查看签证"]
private let stepLabelHeight: CGFloat = 18
private lazy var firstStepLabel: UILabel = {
return getStepLabel("1")
}()
private lazy var secondStepLabel: UILabel = {
return getStepLabel("2")
}()
private lazy var thirdStepLabel: UILabel = {
return getStepLabel("3")
}()
private lazy var fourthStepLabel: UILabel = {
return getStepLabel("4")
}()
private lazy var firstStepNameLabel: UILabel = {
return getStepNameLabel(stepNames[0])
}()
private lazy var secondStepNameLabel: UILabel = {
return getStepNameLabel(stepNames[1])
}()
private lazy var thirdStepNameLabel: UILabel = {
return getStepNameLabel(stepNames[2])
}()
private lazy var fourthStepNameLabel: UILabel = {
return getStepNameLabel(stepNames[3])
}()
private lazy var firstDashLine: YHDashLineView = {
return getDashLineView()
}()
private lazy var secondDashLine: YHDashLineView = {
return getDashLineView()
}()
private lazy var thirdDashLine: YHDashLineView = {
return getDashLineView()
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension YHHKVisaRenewalPaymentStepView {
private func setupViews() {
backgroundColor = .white
addSubviews([firstStepLabel, secondStepLabel, thirdStepLabel, fourthStepLabel])
addSubviews([firstDashLine, secondDashLine, thirdDashLine])
addSubviews([firstStepNameLabel, secondStepNameLabel, thirdStepNameLabel, fourthStepNameLabel])
firstStepLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(50)
make.width.height.equalTo(stepLabelHeight)
}
fourthStepLabel.snp.makeConstraints { make in
make.top.equalTo(firstStepLabel.snp.top)
make.right.equalToSuperview().offset(-50)
make.width.height.equalTo(stepLabelHeight)
}
secondStepLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.width.height.equalTo(stepLabelHeight)
}
thirdStepLabel.snp.makeConstraints { make in
make.top.equalTo(firstStepLabel.snp.top)
make.width.height.equalTo(stepLabelHeight)
}
firstDashLine.snp.makeConstraints { make in
make.left.equalTo(firstStepLabel.snp.right).offset(8)
make.right.equalTo(secondStepLabel.snp.left).offset(-8)
make.height.equalTo(1)
make.centerY.equalTo(firstStepLabel)
}
secondDashLine.snp.makeConstraints { make in
make.left.equalTo(secondStepLabel.snp.right).offset(8)
make.right.equalTo(thirdStepLabel.snp.left).offset(-8)
make.width.equalTo(firstDashLine)
make.height.equalTo(1)
make.centerY.equalTo(firstStepLabel)
}
thirdDashLine.snp.makeConstraints { make in
make.left.equalTo(thirdStepLabel.snp.right).offset(8)
make.right.equalTo(fourthStepLabel.snp.left).offset(-8)
make.width.equalTo(firstDashLine)
make.height.equalTo(1)
make.centerY.equalTo(firstStepLabel)
}
firstStepNameLabel.snp.makeConstraints { make in
make.top.equalTo(firstStepLabel.snp.bottom).offset(6)
make.centerX.equalTo(firstStepLabel.snp.centerX)
make.bottom.equalToSuperview().offset(-16)
}
secondStepNameLabel.snp.makeConstraints { make in
make.top.equalTo(secondStepLabel.snp.bottom).offset(6)
make.centerX.equalTo(secondStepLabel.snp.centerX)
make.bottom.equalToSuperview().offset(-16)
}
thirdStepNameLabel.snp.makeConstraints { make in
make.top.equalTo(thirdStepLabel.snp.bottom).offset(6)
make.centerX.equalTo(thirdStepLabel.snp.centerX)
make.bottom.equalToSuperview().offset(-16)
}
fourthStepNameLabel.snp.makeConstraints { make in
make.top.equalTo(fourthStepLabel.snp.bottom).offset(6)
make.centerX.equalTo(fourthStepLabel.snp.centerX)
make.bottom.equalToSuperview().offset(-16)
}
}
private func getStepLabel(_ title: String) -> UILabel {
let label = UILabel()
label.font = UIFont(name: "DIN Alternate Bold", size: 12)
label.textColor = .mainTextColor70
label.backgroundColor = UIColor(hex: 0xf4f6fa)
label.layer.cornerRadius = stepLabelHeight / 2.0
label.clipsToBounds = true
label.text = title
label.textAlignment = .center
return label
}
private func getStepNameLabel(_ title: String) -> UILabel {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = .mainTextColor70
label.text = title
return label
}
private func getDashLineView() -> YHDashLineView {
let view = YHDashLineView(strokeColor: UIColor(hex: 0x121A26, alpha: 0.12).cgColor, lineWidth: 1, lineDashPattern: [2, 2])
return view
}
}
//
// YHVisaRenewalGuideHeaderCell.swift
// galaxy
//
// Created by alexzzw on 2024/10/9.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHVisaRenewalGuideHeaderCell: UITableViewCell {
static let cellReuseIdentifier = "YHVisaRenewalGuideHeaderCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var tipIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "right_arrow_black_20")
return view
}()
private lazy var tipTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var tipDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222")
return label
}()
private lazy var subContainerView: YHBaseDynamicCornerRadiusView = {
let view = YHBaseDynamicCornerRadiusView(cornerRadius: 8, corner: .none)
view.backgroundColor = .white
return view
}()
private lazy var warrnIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "right_arrow_black_20")
return view
}()
private lazy var warrnDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor(hexString: "#222222")
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String?, detail: String?) {
// infoTitleLabel.text = title
// infoDetailLabel.text = detail
}
func setupCellASAttributedInfo(title: String?, detail: ASAttributedString?, detailColor: UIColor = .mainTextColor50) {
// infoTitleLabel.text = title
// infoDetailLabel.textColor = detailColor
// infoDetailLabel.attributed.text = detail
}
}
extension YHVisaRenewalGuideHeaderCell {
private func setupUI() {
selectionStyle = .none
backgroundColor = .clear
contentView.addSubview(subContainerView)
// subContainerView.snp.makeConstraints { make in
// make.edges.equalToSuperview()
// }
//
// bottomLineView.snp.makeConstraints { make in
// make.bottom.equalToSuperview()
// make.left.equalToSuperview().offset(18)
// make.right.equalToSuperview().offset(-18)
// make.height.equalTo(0.5)
// }
}
}
...@@ -147,8 +147,8 @@ extension YHResignGuidelinesExampleShareViewController { ...@@ -147,8 +147,8 @@ extension YHResignGuidelinesExampleShareViewController {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
DispatchQueue.main.async { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
YHHUD.flash(message: "保存成功") YHHUD.flash(message: "保存成功")
} }
} else { } else {
......
...@@ -407,8 +407,8 @@ extension YHH5WebViewVC { ...@@ -407,8 +407,8 @@ extension YHH5WebViewVC {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
DispatchQueue.main.async { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
YHHUD.flash(message: "保存成功") YHHUD.flash(message: "保存成功")
} }
} else { } else {
......
...@@ -254,8 +254,8 @@ private extension YHLongtapPictureSheetView { ...@@ -254,8 +254,8 @@ private extension YHLongtapPictureSheetView {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
DispatchQueue.main.async { DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
YHHUD.flash(message: "保存成功") YHHUD.flash(message: "保存成功")
} }
} else { } else {
......
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