|
@@ -6,7 +6,7 @@
|
|
|
//
|
|
|
|
|
|
//import IQKeyboardManagerSwift
|
|
|
-
|
|
|
+import PhotosUI
|
|
|
class TSPTPInputVC: TSBaseVC {
|
|
|
|
|
|
lazy var viewModel: TSPTPInputVM = {
|
|
@@ -28,9 +28,7 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
lazy var vipBtn: UIButton = {
|
|
|
let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self] in
|
|
|
guard let self = self else { return }
|
|
|
- TSPurchaseVC.show(target: self) {
|
|
|
-
|
|
|
- }
|
|
|
+ TSPurchaseVC.show(target: self) {}
|
|
|
}
|
|
|
return vipBtn
|
|
|
}()
|
|
@@ -46,21 +44,21 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
make.left.equalTo(16)
|
|
|
}
|
|
|
|
|
|
- let keyboardBtn = UIButton.createButton(image: UIImage(named: "keyboard")) { [weak self] in
|
|
|
- guard let self = self else { return }
|
|
|
- kPresentModalVC(target: self, modelVC: TSWallpaperVC())
|
|
|
- }
|
|
|
- navBarView.barView.addSubview(keyboardBtn)
|
|
|
- keyboardBtn.snp.makeConstraints { make in
|
|
|
- make.centerY.equalToSuperview()
|
|
|
- make.trailing.equalTo(-16)
|
|
|
- make.width.height.equalTo(24)
|
|
|
- }
|
|
|
+// let keyboardBtn = UIButton.createButton(image: UIImage(named: "keyboard")) { [weak self] in
|
|
|
+// guard let self = self else { return }
|
|
|
+// kPresentModalVC(target: self, modelVC: TSWallpaperVC())
|
|
|
+// }
|
|
|
+// navBarView.barView.addSubview(keyboardBtn)
|
|
|
+// keyboardBtn.snp.makeConstraints { make in
|
|
|
+// make.centerY.equalToSuperview()
|
|
|
+// make.trailing.equalTo(-16)
|
|
|
+// make.width.height.equalTo(24)
|
|
|
+// }
|
|
|
|
|
|
navBarView.barView.addSubview(vipBtn)
|
|
|
vipBtn.snp.makeConstraints { make in
|
|
|
make.centerY.equalToSuperview()
|
|
|
- make.trailing.equalTo(-60)
|
|
|
+ make.trailing.equalTo(-16)//(-60)
|
|
|
make.width.height.equalTo(24)
|
|
|
}
|
|
|
|
|
@@ -73,71 +71,71 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
cusStackView.scrollView.isScrollEnabled = false
|
|
|
return cusStackView
|
|
|
}()
|
|
|
-
|
|
|
- //###################################### 入口 view ######################################
|
|
|
|
|
|
- let bannerY:CGFloat = 17
|
|
|
- let bannerW:CGFloat = 166*kDesignScale
|
|
|
- let bannerH:CGFloat = 117*kDesignScale
|
|
|
- lazy var textToPhotoBannerBtn: UIButton = {
|
|
|
- let textToPhotoBannerBtn = UIButton.createButton(backgroundImage: UIImage(named: "textToPhoto_banner"))
|
|
|
- textToPhotoBannerBtn.addTarget(self, action: #selector(clickTextToPhoto), for: .touchUpInside)
|
|
|
- textToPhotoBannerBtn.frame = CGRect(x: 16, y: bannerY, width: bannerW, height: bannerH)
|
|
|
-
|
|
|
- let label = UILabel.createLabel(text: "Text ➡️ Photo".localized,font: .font(name:.PoppinsBlackItalic,size: 16),textColor: .white)
|
|
|
- textToPhotoBannerBtn.addSubview(label)
|
|
|
- label.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(12)
|
|
|
- make.leading.equalTo(8)
|
|
|
- make.height.equalTo(24)
|
|
|
- }
|
|
|
-
|
|
|
- let button = UIButton.createButton(title:"Try Now".localized,backgroundColor:.white,font: .font(size: 11),titleColor: "#ED69AA".uiColor,corner: 9)
|
|
|
- button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 6, bottom: 0, right: 6)
|
|
|
- textToPhotoBannerBtn.addSubview(button)
|
|
|
- button.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(44)
|
|
|
- make.leading.equalTo(8)
|
|
|
- make.height.equalTo(18)
|
|
|
- }
|
|
|
-
|
|
|
- return textToPhotoBannerBtn
|
|
|
- }()
|
|
|
-
|
|
|
- lazy var textToEmojiBannerBtn: UIButton = {
|
|
|
- let textToEmojiBannerBtn = UIButton.createButton(backgroundImage: UIImage(named: "textToEmoji_banner"))
|
|
|
- textToEmojiBannerBtn.addTarget(self, action: #selector(clickTextToEmoji), for: .touchUpInside)
|
|
|
- let x = textToPhotoBannerBtn.x + textToPhotoBannerBtn.width + 11.0
|
|
|
- textToEmojiBannerBtn.frame = CGRect(x: x, y: bannerY, width: bannerW, height: bannerH)
|
|
|
-
|
|
|
- let color:UIColor = "#7855D6".uiColor
|
|
|
- let label = UILabel.createLabel(text: "Text ➡️ Emoji".localized,font: .font(name:.PoppinsBlackItalic,size: 16),textColor: color)
|
|
|
- textToEmojiBannerBtn.addSubview(label)
|
|
|
- label.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(12)
|
|
|
- make.leading.equalTo(8)
|
|
|
- make.height.equalTo(24)
|
|
|
- }
|
|
|
-
|
|
|
- let button = UIButton.createButton(title:"Try Now".localized,backgroundColor:color,font: .font(size: 11),titleColor: "#D0D5FF".uiColor,corner: 9)
|
|
|
- button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 6, bottom: 0, right: 6)
|
|
|
- textToEmojiBannerBtn.addSubview(button)
|
|
|
- button.snp.makeConstraints { make in
|
|
|
- make.top.equalTo(44)
|
|
|
- make.leading.equalTo(8)
|
|
|
- make.height.equalTo(18)
|
|
|
- }
|
|
|
-
|
|
|
- return textToEmojiBannerBtn
|
|
|
- }()
|
|
|
-
|
|
|
-
|
|
|
- lazy var entranceView: UIView = {
|
|
|
- let entranceView = UIView()
|
|
|
- entranceView.addSubview(textToPhotoBannerBtn)
|
|
|
- entranceView.addSubview(textToEmojiBannerBtn)
|
|
|
- return entranceView
|
|
|
- }()
|
|
|
+// //###################################### 入口 view ######################################
|
|
|
+//
|
|
|
+// let bannerY:CGFloat = 17
|
|
|
+// let bannerW:CGFloat = 166*kDesignScale
|
|
|
+// let bannerH:CGFloat = 117*kDesignScale
|
|
|
+// lazy var textToPhotoBannerBtn: UIButton = {
|
|
|
+// let textToPhotoBannerBtn = UIButton.createButton(backgroundImage: UIImage(named: "textToPhoto_banner"))
|
|
|
+// textToPhotoBannerBtn.addTarget(self, action: #selector(clickTextToPhoto), for: .touchUpInside)
|
|
|
+// textToPhotoBannerBtn.frame = CGRect(x: 16, y: bannerY, width: bannerW, height: bannerH)
|
|
|
+//
|
|
|
+// let label = UILabel.createLabel(text: "Text ➡️ Photo".localized,font: .font(name:.PoppinsBlackItalic,size: 16),textColor: .white)
|
|
|
+// textToPhotoBannerBtn.addSubview(label)
|
|
|
+// label.snp.makeConstraints { make in
|
|
|
+// make.top.equalTo(12)
|
|
|
+// make.leading.equalTo(8)
|
|
|
+// make.height.equalTo(24)
|
|
|
+// }
|
|
|
+//
|
|
|
+// let button = UIButton.createButton(title:"Try Now".localized,backgroundColor:.white,font: .font(size: 11),titleColor: "#ED69AA".uiColor,corner: 9)
|
|
|
+// button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 6, bottom: 0, right: 6)
|
|
|
+// textToPhotoBannerBtn.addSubview(button)
|
|
|
+// button.snp.makeConstraints { make in
|
|
|
+// make.top.equalTo(44)
|
|
|
+// make.leading.equalTo(8)
|
|
|
+// make.height.equalTo(18)
|
|
|
+// }
|
|
|
+//
|
|
|
+// return textToPhotoBannerBtn
|
|
|
+// }()
|
|
|
+//
|
|
|
+// lazy var textToEmojiBannerBtn: UIButton = {
|
|
|
+// let textToEmojiBannerBtn = UIButton.createButton(backgroundImage: UIImage(named: "textToEmoji_banner"))
|
|
|
+// textToEmojiBannerBtn.addTarget(self, action: #selector(clickTextToEmoji), for: .touchUpInside)
|
|
|
+// let x = textToPhotoBannerBtn.x + textToPhotoBannerBtn.width + 11.0
|
|
|
+// textToEmojiBannerBtn.frame = CGRect(x: x, y: bannerY, width: bannerW, height: bannerH)
|
|
|
+//
|
|
|
+// let color:UIColor = "#7855D6".uiColor
|
|
|
+// let label = UILabel.createLabel(text: "Text ➡️ Emoji".localized,font: .font(name:.PoppinsBlackItalic,size: 16),textColor: color)
|
|
|
+// textToEmojiBannerBtn.addSubview(label)
|
|
|
+// label.snp.makeConstraints { make in
|
|
|
+// make.top.equalTo(12)
|
|
|
+// make.leading.equalTo(8)
|
|
|
+// make.height.equalTo(24)
|
|
|
+// }
|
|
|
+//
|
|
|
+// let button = UIButton.createButton(title:"Try Now".localized,backgroundColor:color,font: .font(size: 11),titleColor: "#D0D5FF".uiColor,corner: 9)
|
|
|
+// button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 6, bottom: 0, right: 6)
|
|
|
+// textToEmojiBannerBtn.addSubview(button)
|
|
|
+// button.snp.makeConstraints { make in
|
|
|
+// make.top.equalTo(44)
|
|
|
+// make.leading.equalTo(8)
|
|
|
+// make.height.equalTo(18)
|
|
|
+// }
|
|
|
+//
|
|
|
+// return textToEmojiBannerBtn
|
|
|
+// }()
|
|
|
+//
|
|
|
+//
|
|
|
+// lazy var entranceView: UIView = {
|
|
|
+// let entranceView = UIView()
|
|
|
+// entranceView.addSubview(textToPhotoBannerBtn)
|
|
|
+// entranceView.addSubview(textToEmojiBannerBtn)
|
|
|
+// return entranceView
|
|
|
+// }()
|
|
|
|
|
|
//###################################### 上传图片 ######################################
|
|
|
lazy var uploadView: TSPTPUploadView = {
|
|
@@ -149,8 +147,8 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
viewModel.upLoadImage = nil
|
|
|
uploadView.upLoadImage = nil
|
|
|
}else{//添加
|
|
|
- if TSPTPImageHintVC.isShowUploadImageHint{
|
|
|
- TSPTPImageHintVC.isShowUploadImageHint = false
|
|
|
+ if TSAIAgeImageHintVC.isShowUploadImageHint{
|
|
|
+ TSAIAgeImageHintVC.isShowUploadImageHint = false
|
|
|
presentModalHintVC()
|
|
|
}else {
|
|
|
pickSinglePhoto()
|
|
@@ -164,33 +162,38 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
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
|
|
|
- uploadView.upLoadImage = image
|
|
|
- }
|
|
|
- }
|
|
|
- }else if let image = image {
|
|
|
- if image.isLargerThan(byteSize: maxSize) {
|
|
|
+ handleSinglePhoto(image: image, phAsset: phAsset)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ func handleSinglePhoto(image:UIImage?,phAsset:PHAsset?){
|
|
|
+ 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
|
|
|
uploadView.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
|
|
|
+ uploadView.upLoadImage = image
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
//###################################### 选择风格 ######################################
|
|
|
lazy var selectStyleView: TSPTPSelectStyleView = {
|
|
|
let selectStyleView = TSPTPSelectStyleView()
|
|
@@ -350,7 +353,7 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
|
|
|
setUpCusStackView()
|
|
|
|
|
|
- upDateCusStackViewH()
|
|
|
+// upDateCusStackViewH()
|
|
|
kDelayMainShort {
|
|
|
self.upDateCusStackViewH()
|
|
|
}
|
|
@@ -359,6 +362,7 @@ class TSPTPInputVC: TSBaseVC {
|
|
|
override func dealThings() {
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
|
|
|
updateVipView()
|
|
|
+ TSAIAgeImageHintVC.userDefaultsKey = "isFirstUploadImagePTP"
|
|
|
// collectionViewObserverHandle()
|
|
|
//// // 监听键盘事件
|
|
|
// NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
|
|
@@ -410,8 +414,7 @@ extension TSPTPInputVC {
|
|
|
dePrint("collectionViewObserver cusStackView.viewH == \(cusStackView.viewH)")
|
|
|
return cusStackView.viewH
|
|
|
}
|
|
|
- dePrint("collectionViewObserver cusStackView.viewH = \(462+bannerH+bannerY+promptTextViewH)")
|
|
|
- return 462+bannerH+bannerY+promptTextViewH
|
|
|
+ return 462 //+bannerH+bannerY+promptTextViewH
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -428,10 +431,10 @@ extension TSPTPInputVC {
|
|
|
}
|
|
|
|
|
|
func presentModalHintVC(){
|
|
|
- let vc = TSPTPImageHintVC()
|
|
|
- vc.clickUpImageHandle = { [weak self] in
|
|
|
+ let vc = TSAIAgeImageHintVC()
|
|
|
+ vc.clickUpImageHandle = { [weak self] image,phAsset in
|
|
|
guard let self = self else { return }
|
|
|
- pickSinglePhoto()
|
|
|
+ handleSinglePhoto(image: image, phAsset: phAsset)
|
|
|
}
|
|
|
kPresentModalVC(target: self, modelVC: vc,transitionStyle: .crossDissolve)
|
|
|
}
|
|
@@ -440,11 +443,11 @@ extension TSPTPInputVC {
|
|
|
|
|
|
collectionComponent.collectionView.addSubview(cusStackView)
|
|
|
|
|
|
- cusStackView.addSubviewToStack(entranceView)
|
|
|
- entranceView.snp.makeConstraints { make in
|
|
|
- make.height.equalTo(bannerH+bannerY)
|
|
|
- make.width.equalTo(k_ScreenWidth)
|
|
|
- }
|
|
|
+// cusStackView.addSubviewToStack(entranceView)
|
|
|
+// entranceView.snp.makeConstraints { make in
|
|
|
+// make.height.equalTo(bannerH+bannerY)
|
|
|
+// make.width.equalTo(k_ScreenWidth)
|
|
|
+// }
|
|
|
|
|
|
let uploadPhotoTitleView = TSTitleView.creatTitleView(title: "Upload Photo".localized, subTitle: "(Size ≤ 10MB)".localized)
|
|
|
cusStackView.addSubviewToStack(uploadPhotoTitleView)
|
|
@@ -547,13 +550,13 @@ extension TSPTPInputVC {
|
|
|
}
|
|
|
extension TSPTPInputVC {
|
|
|
|
|
|
- @objc func clickTextToPhoto() {
|
|
|
- kPushVC(target: self, modelVC: TSTextGeneralPictureVC())
|
|
|
- }
|
|
|
-
|
|
|
- @objc func clickTextToEmoji() {
|
|
|
- kPushVC(target: self, modelVC: TSGenmojiVC())
|
|
|
- }
|
|
|
+// @objc func clickTextToPhoto() {
|
|
|
+// kPushVC(target: self, modelVC: TSTextGeneralPictureVC())
|
|
|
+// }
|
|
|
+//
|
|
|
+// @objc func clickTextToEmoji() {
|
|
|
+// kPushVC(target: self, modelVC: TSGenmojiVC())
|
|
|
+// }
|
|
|
|
|
|
@objc func clickView() {
|
|
|
view.endEditing(true)
|