|
@@ -14,15 +14,21 @@ enum TSGeneratorImageStyle {
|
|
|
|
|
|
class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
var generatorStyle:TSGeneratorImageStyle
|
|
|
-
|
|
|
- init(generatorStyle:TSGeneratorImageStyle) {
|
|
|
+ var titleString:String
|
|
|
+ init(titleString:String,generatorStyle:TSGeneratorImageStyle) {
|
|
|
+ self.titleString = titleString
|
|
|
self.generatorStyle = generatorStyle
|
|
|
super.init()
|
|
|
}
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
|
fatalError("init(coder:) has not been implemented")
|
|
|
}
|
|
|
-
|
|
|
+ //#####################################数据区#####################################
|
|
|
+ let lineSpacing = 6.0
|
|
|
+ lazy var photoPickerManager: TSPhotoPickerManager = {
|
|
|
+ let photoPickerManager = TSPhotoPickerManager(viewController: self)
|
|
|
+ return photoPickerManager
|
|
|
+ }()
|
|
|
//#####################################底部基础#####################################
|
|
|
lazy var cusStackView: TSCustomStackView = {
|
|
|
let cusStackView = TSCustomStackView(axis: .vertical,spacing: 0)
|
|
@@ -33,7 +39,7 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
lazy var submitBtn: UIButton = {
|
|
|
let submitBtn = kCreateNormalSubmitBtn(title: "Accept".localized) { [weak self] in
|
|
|
guard let self = self else { return }
|
|
|
-
|
|
|
+ generateImage()
|
|
|
}
|
|
|
submitBtn.cornerRadius = 24.0
|
|
|
return submitBtn
|
|
@@ -44,16 +50,20 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
didSet{
|
|
|
if let image = upLoadImage {
|
|
|
upLoadView.isHidden = true
|
|
|
- uploadExampleImageView.isHidden = true
|
|
|
+// uploadExampleImageView.isHidden = true
|
|
|
uploadImageView.isHidden = false
|
|
|
deleteBtn.isHidden = false
|
|
|
uploadImageView.image = image
|
|
|
+
|
|
|
+
|
|
|
+ submitBtn.isEnabled = true
|
|
|
}else {
|
|
|
upLoadView.isHidden = false
|
|
|
- uploadExampleImageView.isHidden = false
|
|
|
+// uploadExampleImageView.isHidden = false
|
|
|
uploadImageView.isHidden = true
|
|
|
deleteBtn.isHidden = true
|
|
|
uploadImageView.image = nil
|
|
|
+ submitBtn.isEnabled = false
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -80,30 +90,30 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
return bgView
|
|
|
}()
|
|
|
|
|
|
- lazy var uploadExampleImageView: UIImageView = {
|
|
|
- let uploadExampleImageView = UIImageView()
|
|
|
- uploadExampleImageView.image = UIImage(named: "ptp_upload_example")
|
|
|
- uploadExampleImageView.contentMode = .scaleAspectFill
|
|
|
- uploadExampleImageView.cornerRadius = 12
|
|
|
- uploadExampleImageView.isHidden = false
|
|
|
-
|
|
|
- let button = UIButton.createButton(title:"Tap to select photo".localized,backgroundColor:.black.withAlphaComponent(0.4),font: .font(size: 14),titleColor: .white,corner: 12)
|
|
|
- button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 12, bottom: 0, right: 12)
|
|
|
- uploadExampleImageView.addSubview(button)
|
|
|
- button.snp.makeConstraints { make in
|
|
|
- make.centerX.equalToSuperview()
|
|
|
- make.bottom.equalTo(-20)
|
|
|
- make.height.equalTo(24)
|
|
|
- }
|
|
|
-
|
|
|
- return uploadExampleImageView
|
|
|
- }()
|
|
|
+// lazy var uploadExampleImageView: UIImageView = {
|
|
|
+// let uploadExampleImageView = UIImageView()
|
|
|
+// uploadExampleImageView.image = UIImage(named: "ptp_upload_example")
|
|
|
+// uploadExampleImageView.contentMode = .scaleAspectFill
|
|
|
+// uploadExampleImageView.cornerRadius = 12
|
|
|
+// uploadExampleImageView.isHidden = false
|
|
|
+//
|
|
|
+// let button = UIButton.createButton(title:"Tap to select photo".localized,backgroundColor:.black.withAlphaComponent(0.4),font: .font(size: 14),titleColor: .white,corner: 12)
|
|
|
+// button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 12, bottom: 0, right: 12)
|
|
|
+// uploadExampleImageView.addSubview(button)
|
|
|
+// button.snp.makeConstraints { make in
|
|
|
+// make.centerX.equalToSuperview()
|
|
|
+// make.bottom.equalTo(-20)
|
|
|
+// make.height.equalTo(24)
|
|
|
+// }
|
|
|
+//
|
|
|
+// return uploadExampleImageView
|
|
|
+// }()
|
|
|
|
|
|
lazy var uploadImageView: UIImageView = {
|
|
|
let uploadImageView = UIImageView()
|
|
|
uploadImageView.contentMode = .scaleAspectFit
|
|
|
uploadImageView.cornerRadius = 12
|
|
|
- upLoadView.isHidden = true
|
|
|
+// upLoadView.isHidden = true
|
|
|
return uploadImageView
|
|
|
}()
|
|
|
|
|
@@ -112,7 +122,7 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
|
|
|
let bgView = UIView()
|
|
|
bgView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:#selector(clickBgView)))
|
|
|
- let bgImageView = UIImageView.createImageView(imageName: "ptp_upload_bg")
|
|
|
+ let bgImageView = UIImageView.createImageView(imageName: "ailist_upload_big_bg")
|
|
|
bgImageView.contentMode = .scaleToFill
|
|
|
bgView.addSubview(bgImageView)
|
|
|
bgImageView.snp.makeConstraints { make in
|
|
@@ -121,15 +131,15 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
|
|
|
bgView.addSubview(upLoadView)
|
|
|
upLoadView.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(88)
|
|
|
+ make.top.equalTo(244*kDesignScale)
|
|
|
make.centerX.equalToSuperview()
|
|
|
}
|
|
|
|
|
|
- bgView.addSubview(uploadExampleImageView)
|
|
|
- uploadExampleImageView.snp.makeConstraints { make in
|
|
|
- make.top.leading.equalTo(8)
|
|
|
- make.bottom.trailing.equalTo(-8)
|
|
|
- }
|
|
|
+// bgView.addSubview(uploadExampleImageView)
|
|
|
+// uploadExampleImageView.snp.makeConstraints { make in
|
|
|
+// make.top.leading.equalTo(8)
|
|
|
+// make.bottom.trailing.equalTo(-8)
|
|
|
+// }
|
|
|
|
|
|
bgView.addSubview(uploadImageView)
|
|
|
uploadImageView.snp.makeConstraints { make in
|
|
@@ -154,8 +164,8 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
override func createView() {
|
|
|
|
|
|
addNormalNavBarView()
|
|
|
- setPageTitle("Change Age")
|
|
|
-
|
|
|
+ setPageTitle(titleString)
|
|
|
+ _ = setNavigationItem("", imageName: "aichat_history", direction: .right, action: #selector(clickNavRight))
|
|
|
|
|
|
contentView.addSubview(submitBtn)
|
|
|
submitBtn.snp.makeConstraints { make in
|
|
@@ -172,13 +182,41 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
make.bottom.equalTo(submitBtn.snp.top).offset(-10)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ setUpStackView()
|
|
|
+ }
|
|
|
+
|
|
|
+ override func dealThings() {
|
|
|
+ kSetBtnVipIcon(btn: self.submitBtn, show: true)
|
|
|
+// NotificationCenter.default.addObserver(self, selector: #selector(updateVipView), name: .kPurchaseDidChanged, object: nil)
|
|
|
+// updateVipView()
|
|
|
+
|
|
|
+ kDelayMainShort {
|
|
|
+ if TSAIAgeImageHintVC.isShowUploadImageHint{
|
|
|
+ self.presentModalHintVC()
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+extension TSAIUploadPhotoBaseVC {
|
|
|
+
|
|
|
+// @objc func updateVipView() {
|
|
|
+// kExecuteOnMainThread {
|
|
|
+//
|
|
|
+// var showVip = kPurchaseDefault.generateVipShow(type: .picToPic)
|
|
|
+// if showVip == false {
|
|
|
+// showVip = self.viewModel.selectedPTPStyleModel?.isVip ?? false
|
|
|
+// }
|
|
|
+// kSetBtnVipIcon(btn: self.submitBtn, show: showVip)
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
|
|
|
func setUpStackView(){
|
|
|
|
|
|
+ //添加上传一大块
|
|
|
let bgView = UIView()
|
|
|
+// bgView.backgroundColor = .yellow.withAlphaComponent(0.1)
|
|
|
bgView.addSubview(uploadImageBgView)
|
|
|
cusStackView.addSubviewToStack(bgView)
|
|
|
|
|
@@ -190,14 +228,127 @@ class TSAIUploadPhotoBaseVC: TSBaseVC {
|
|
|
make.bottom.equalTo(-16)
|
|
|
}
|
|
|
|
|
|
- uploadImageBgView.addSubview(deleteBtn)
|
|
|
+ bgView.addSubview(deleteBtn)
|
|
|
deleteBtn.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(-6)
|
|
|
- make.trailing.equalTo(-4)
|
|
|
+ make.top.equalTo(0)
|
|
|
+ make.trailing.equalTo(-32*kDesignScale)
|
|
|
make.width.height.equalTo(32)
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ //文字信息区域
|
|
|
+ cusStackView.addSubviewToStack(getTextInfoCell(text: "Size ≤ 5mb".localized))
|
|
|
+ cusStackView.addSpacing(height: lineSpacing)
|
|
|
+ cusStackView.addSubviewToStack(getTextInfoCell(text: "Single photo with face fully visible".localized))
|
|
|
+ cusStackView.addSpacing(height: lineSpacing)
|
|
|
+ cusStackView.addSubviewToStack(getTextInfoCell(text: "No group photos, covered faces, nudes".localized))
|
|
|
+ }
|
|
|
+
|
|
|
+ func getTextInfoCell(text:String) -> UIView {
|
|
|
+
|
|
|
+ let bgView = UIView()
|
|
|
+ let pointView = UIView()
|
|
|
+ pointView.backgroundColor = .white.withAlphaComponent(0.7)
|
|
|
+ pointView.cornerRadius = 1
|
|
|
+ bgView.addSubview(pointView)
|
|
|
+ pointView.snp.makeConstraints { make in
|
|
|
+ make.top.equalTo(7)
|
|
|
+ make.leading.equalTo(22)
|
|
|
+ make.width.height.equalTo(2)
|
|
|
+ }
|
|
|
+ let textLabel1 = UILabel.createLabel(text: text,font: .font(size: 12),textColor: .white.withAlphaComponent(0.6),numberOfLines: 0)
|
|
|
+ textLabel1.setLineSpacing(lineSpacing)
|
|
|
+ bgView.addSubview(textLabel1)
|
|
|
+ textLabel1.snp.makeConstraints { make in
|
|
|
+ make.top.bottom.equalToSuperview()
|
|
|
+ make.leading.equalTo(16+16)
|
|
|
+ make.trailing.equalTo(-16)
|
|
|
+ }
|
|
|
+ return bgView
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+extension TSAIUploadPhotoBaseVC {
|
|
|
+
|
|
|
+ @objc func clickNavRight() {
|
|
|
+ kPushVC(target: self, modelVC: TSAIListHistoryBaseVC(generatorStyle: generatorStyle))
|
|
|
}
|
|
|
|
|
|
@objc func clickBgView() {
|
|
|
+ pickSinglePhoto()
|
|
|
+ }
|
|
|
+
|
|
|
+ func pickSinglePhoto() {
|
|
|
+ photoPickerManager.pickSinglePhoto { [weak self] image,phAsset in
|
|
|
+ guard let self = self else { return }
|
|
|
+
|
|
|
+ let maxSize = 10 * 1024 * 1024
|
|
|
+
|
|
|
+ if let image = image,let phAsset = phAsset {
|
|
|
+ // 方法2:异步获取详细大小(不阻塞主线程)
|
|
|
+ TSPhotoSizeHelper.getImageFileSizeAsync(asset: phAsset) {[weak self] size in
|
|
|
+ guard let self = self else { return }
|
|
|
+
|
|
|
+ let mbSize = Double(size) / (1024 * 1024)
|
|
|
+ print("精确大小: \(mbSize) MB,size = \(size)")
|
|
|
+ if size > maxSize {
|
|
|
+ TSToastShared.showToast(text: "Photo must be smaller than 10MB.".localized)
|
|
|
+ }else{
|
|
|
+// viewModel.upLoadImage = image
|
|
|
+ upLoadImage = image
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if let image = image {
|
|
|
+ if image.isLargerThan(byteSize: maxSize) {
|
|
|
+ TSToastShared.showToast(text: "Photo must be smaller than 10MB.".localized)
|
|
|
+ }else{
|
|
|
+// viewModel.upLoadImage = image
|
|
|
+ upLoadImage = image
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ func presentModalHintVC(){
|
|
|
+ let vc = TSAIAgeImageHintVC()
|
|
|
+ vc.clickUpImageHandle = { [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ pickSinglePhoto()
|
|
|
+ }
|
|
|
+ kPresentModalVC(target: self, modelVC: vc,transitionStyle: .crossDissolve)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+extension TSAIUploadPhotoBaseVC {
|
|
|
+
|
|
|
+ func generateImage() {
|
|
|
+
|
|
|
+ //判断 vip
|
|
|
+ if kJudgeVip(externalBool: true, vc: self) { [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ }{ return }
|
|
|
+
|
|
|
+
|
|
|
+ guard let upLoadImage = upLoadImage else { return }
|
|
|
+ let gennerateVC = TSAIListPhotoGeneratorBaseVC(upLoadImage: upLoadImage, generatorStyle: generatorStyle) { [weak self] model in
|
|
|
+ guard let self = self else { return }
|
|
|
+ saveModel(model: model)
|
|
|
+ }
|
|
|
+
|
|
|
+ kPresentModalVC(target: self, modelVC: gennerateVC,transitionStyle: .crossDissolve)
|
|
|
}
|
|
|
+
|
|
|
+ func saveModel(model:TSGenmojiModel){
|
|
|
+ switch generatorStyle {
|
|
|
+ case .ageOld:
|
|
|
+ TSChangeOldAgeHistory.shared.saveModel(model: model)
|
|
|
+ case .ageChild:
|
|
|
+ TSChangeBabyAgeHistory.shared.saveModel(model: model)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|