|
@@ -0,0 +1,309 @@
|
|
|
+//
|
|
|
+// TSAIPhotoBrowseVC.swift
|
|
|
+// AIEmoji
|
|
|
+//
|
|
|
+// Created by 100Years on 2025/4/2.
|
|
|
+//
|
|
|
+
|
|
|
+private let cellId = "TSAIPhotoBrowseCell"
|
|
|
+class TSAIPhotoBrowseVC: TSBaseVC {
|
|
|
+
|
|
|
+ var dataModelArray = [TSGenmojiModel]()
|
|
|
+ var currentImage:UIImage?{
|
|
|
+ let cell = collectionView.cellForItem(at: IndexPath(item: currentIndex, section: 0)) as? TSAIPhotoBrowseCell
|
|
|
+ var image = cell?.netWorkImageView.image
|
|
|
+ image = image?.pngImage
|
|
|
+ return image
|
|
|
+ }
|
|
|
+
|
|
|
+ var currentModel:TSGenmojiModel?{
|
|
|
+ if let model = dataModelArray.safeObj(At: currentIndex){
|
|
|
+ return model
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var currentIndex:Int = 0 {
|
|
|
+ didSet{
|
|
|
+ reloadUI()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ lazy var collectionView: UICollectionView = {
|
|
|
+
|
|
|
+ let layout = UICollectionViewFlowLayout()
|
|
|
+ layout.scrollDirection = .vertical
|
|
|
+
|
|
|
+ let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
|
|
|
+ collectionView.delegate = self
|
|
|
+ collectionView.dataSource = self
|
|
|
+ collectionView.showsVerticalScrollIndicator = false
|
|
|
+ collectionView.showsHorizontalScrollIndicator = false
|
|
|
+ collectionView.backgroundColor = .clear
|
|
|
+ if #available(iOS 11.0, *) {
|
|
|
+ collectionView.contentInsetAdjustmentBehavior = .never
|
|
|
+ }
|
|
|
+ collectionView.register(TSAIPhotoBrowseCell.self, forCellWithReuseIdentifier: cellId)
|
|
|
+ collectionView.isPagingEnabled = true
|
|
|
+ collectionView.isHidden = true
|
|
|
+ if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
|
|
|
+ flowLayout.minimumInteritemSpacing = 0
|
|
|
+ flowLayout.minimumLineSpacing = 0
|
|
|
+ flowLayout.scrollDirection = .horizontal
|
|
|
+ flowLayout.itemSize = CGSize(width: k_ScreenWidth, height: k_ScreenHeight)
|
|
|
+ }
|
|
|
+ return collectionView
|
|
|
+ }()
|
|
|
+
|
|
|
+
|
|
|
+ lazy var leftBtn: UIButton = {
|
|
|
+ let leftBtn = UIButton.createButton(image: UIImage(named: "page_left")){ [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex-1, section: 0), at: .left, animated: true)
|
|
|
+ }
|
|
|
+ return leftBtn
|
|
|
+ }()
|
|
|
+
|
|
|
+ lazy var rightBtn: UIButton = {
|
|
|
+ let rightBtn = UIButton.createButton(image: UIImage(named: "page_right")){ [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex+1, section: 0), at: .left, animated: true)
|
|
|
+ }
|
|
|
+ return rightBtn
|
|
|
+ }()
|
|
|
+
|
|
|
+
|
|
|
+ //保存按钮
|
|
|
+ lazy var bigSaveBtn: UIButton = {
|
|
|
+ let bigSaveBtn = kCreateNormalSubmitBtn(title: "Save".localized) { [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ clickSubmitBtn()
|
|
|
+ }
|
|
|
+ bigSaveBtn.frame = CGRectMake(0, 0, 252, 44)
|
|
|
+ bigSaveBtn.cornerRadius = 22.0
|
|
|
+ return bigSaveBtn
|
|
|
+ }()
|
|
|
+
|
|
|
+ lazy var xBtn: UIButton = {
|
|
|
+ let xBtn = UIButton.createButton(image: UIImage(named: "close_gray")) { [weak self] in
|
|
|
+ guard let self = self else { return }
|
|
|
+ clickXBtn()
|
|
|
+ }
|
|
|
+ return xBtn
|
|
|
+ }()
|
|
|
+
|
|
|
+ override func createView() {
|
|
|
+ super.createView()
|
|
|
+
|
|
|
+ setNavBarViewHidden(true)
|
|
|
+
|
|
|
+ contentView.addSubview(collectionView)
|
|
|
+ collectionView.snp.makeConstraints { make in
|
|
|
+ make.edges.equalTo(0)
|
|
|
+ }
|
|
|
+
|
|
|
+ contentView.addSubview(leftBtn)
|
|
|
+ leftBtn.snp.makeConstraints { make in
|
|
|
+ make.leading.equalTo(17)
|
|
|
+ make.centerY.equalToSuperview()
|
|
|
+ make.width.height.equalTo(40)
|
|
|
+ }
|
|
|
+
|
|
|
+ contentView.addSubview(rightBtn)
|
|
|
+ rightBtn.snp.makeConstraints { make in
|
|
|
+ make.trailing.equalTo(-18)
|
|
|
+ make.centerY.equalToSuperview()
|
|
|
+ make.width.height.equalTo(40)
|
|
|
+ }
|
|
|
+
|
|
|
+ DispatchQueue.main.async {
|
|
|
+// kDelayMainShort {
|
|
|
+ self.collectionView.isHidden = false
|
|
|
+ self.collectionView.reloadData()
|
|
|
+ self.collectionView.setContentOffset(CGPoint(x: CGFloat(self.currentIndex) * self.collectionView.frame.size.width, y: 0), animated: false)
|
|
|
+
|
|
|
+ if let flowLayout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
|
|
|
+ flowLayout.itemSize = self.collectionView.bounds.size
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ contentView.addSubview(bigSaveBtn)
|
|
|
+ bigSaveBtn.snp.makeConstraints { make in
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
+ make.bottom.equalTo(-8-k_Height_safeAreaInsetsBottom())
|
|
|
+ make.width.equalTo(bigSaveBtn.width)
|
|
|
+ make.height.equalTo(bigSaveBtn.height)
|
|
|
+ }
|
|
|
+
|
|
|
+ //关闭按钮
|
|
|
+ contentView.addSubview(xBtn)
|
|
|
+ xBtn.snp.makeConstraints { make in
|
|
|
+ make.top.equalTo(k_Height_StatusBar + 4)
|
|
|
+ make.leading.equalTo(16)
|
|
|
+ make.width.equalTo(36)
|
|
|
+ make.height.equalTo(36)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func clickSubmitBtn(){
|
|
|
+
|
|
|
+ if JudgeVip(){
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if let image = currentImage{
|
|
|
+ PhotoManagerShared.saveImageToAlbum(image) { success, error in
|
|
|
+ if success {
|
|
|
+ kSavePhotoSuccesswShared.show(atView: self.view)
|
|
|
+ }else{
|
|
|
+ debugPrint(error)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ kShowToastDataMissing()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ func JudgeVip() -> Bool {
|
|
|
+ return kJudgeVip(externalBool: currentModel?.response.vip ?? false , vc: self, closePageBlock: nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc func clickXBtn(){
|
|
|
+ pop()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+extension TSAIPhotoBrowseVC {
|
|
|
+
|
|
|
+ func reloadUI() {
|
|
|
+ //判断前后是否还有,以此来确定左右翻页按钮
|
|
|
+ var isHiddenLeft = false
|
|
|
+ var isHiddenRight = false
|
|
|
+ if dataModelArray.count == 1{
|
|
|
+ isHiddenLeft = true
|
|
|
+ isHiddenRight = true
|
|
|
+ }else if currentIndex == 0 {
|
|
|
+ isHiddenLeft = true
|
|
|
+ }else if currentIndex+1 >= dataModelArray.count {
|
|
|
+ isHiddenRight = true
|
|
|
+ }
|
|
|
+
|
|
|
+ leftBtn.isHidden = isHiddenLeft
|
|
|
+ rightBtn.isHidden = isHiddenRight
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//MARK: UICollectionViewDataSource
|
|
|
+extension TSAIPhotoBrowseVC:UICollectionViewDataSource,UICollectionViewDelegate {
|
|
|
+
|
|
|
+ func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
|
|
|
+ resetIndexWithOffset(scrollView)
|
|
|
+ }
|
|
|
+
|
|
|
+ func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
|
|
|
+ resetIndexWithOffset(scrollView)
|
|
|
+ }
|
|
|
+
|
|
|
+ private func resetIndexWithOffset(_ scrollView: UIScrollView) {
|
|
|
+ let item = Int((scrollView.contentOffset.x / scrollView.bounds.width).rounded())
|
|
|
+ currentIndex = item
|
|
|
+ }
|
|
|
+
|
|
|
+ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
|
+ return dataModelArray.count
|
|
|
+ }
|
|
|
+
|
|
|
+ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
|
+ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TSAIPhotoBrowseCell
|
|
|
+ if let model = dataModelArray.safeObj(At: indexPath.item){
|
|
|
+ cell.model = model
|
|
|
+ }
|
|
|
+ return cell
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+class TSAIPhotoBrowseCell : TSBaseCollectionCell{
|
|
|
+
|
|
|
+ lazy var exampleView: UIView = {
|
|
|
+ let exampleView = UIView()
|
|
|
+ exampleView.backgroundColor = "#232323".uiColor.withAlphaComponent(0.3)
|
|
|
+
|
|
|
+ let textLabel = UILabel.createLabel(
|
|
|
+ text: "Example".localized,
|
|
|
+ font: .font(size: 12),
|
|
|
+ textColor: .white
|
|
|
+ )
|
|
|
+
|
|
|
+ exampleView.addSubview(textLabel)
|
|
|
+ textLabel.snp.makeConstraints { make in
|
|
|
+ make.top.edges.equalTo(UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 6))
|
|
|
+ }
|
|
|
+ exampleView.isHidden = true
|
|
|
+ exampleView.cornerRadius = 10.0
|
|
|
+ return exampleView
|
|
|
+ }()
|
|
|
+
|
|
|
+ lazy var netWorkImageView : UIImageView = {
|
|
|
+ let netWorkImageView = UIImageView.createImageView(imageName: "",contentMode: .scaleAspectFit,corner: 24.0)
|
|
|
+ return netWorkImageView
|
|
|
+ }()
|
|
|
+
|
|
|
+ lazy var vipImageView: UIImageView = {
|
|
|
+ let vipImageView = UIImageView.createImageView(imageName:"vip_side_icon")
|
|
|
+ vipImageView.contentMode = .scaleToFill
|
|
|
+ vipImageView.isHidden = true
|
|
|
+ return vipImageView
|
|
|
+ }()
|
|
|
+
|
|
|
+ override func creatUI() {
|
|
|
+ let w = k_ScreenWidth
|
|
|
+ let h = k_ScreenHeight
|
|
|
+ bgContentView.addSubview(netWorkImageView)
|
|
|
+ netWorkImageView.snp.makeConstraints { make in
|
|
|
+ make.center.equalToSuperview()
|
|
|
+ make.width.equalTo(w)
|
|
|
+ make.height.equalTo(h)
|
|
|
+ }
|
|
|
+
|
|
|
+ netWorkImageView.addSubview(vipImageView)
|
|
|
+ vipImageView.snp.makeConstraints { make in
|
|
|
+ make.width.height.equalTo(40)
|
|
|
+ make.top.equalTo(-5)
|
|
|
+ make.trailing.equalTo(5)
|
|
|
+ }
|
|
|
+
|
|
|
+ contentView.addSubview(exampleView)
|
|
|
+ exampleView.snp.makeConstraints { make in
|
|
|
+ make.bottom.equalTo(-(44+8+k_Height_safeAreaInsetsBottom()+20))
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
+ make.height.equalTo(20)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ var model:TSGenmojiModel = TSGenmojiModel(){
|
|
|
+ didSet{
|
|
|
+
|
|
|
+ if model.modelType == .example {
|
|
|
+ exampleView.isHidden = false
|
|
|
+ netWorkImageView.image = UIImage(named:model.response.resultUrl)
|
|
|
+ netWorkImageView.adaptiveScale()
|
|
|
+ }else{
|
|
|
+ exampleView.isHidden = true
|
|
|
+ netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFit, completion: { [weak self] image in
|
|
|
+ guard let self = self else { return }
|
|
|
+ netWorkImageView.adaptiveScale()
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ vipImageView.isHidden = !model.response.vip
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|