|
@@ -17,59 +17,213 @@ class TSBootPageVC: TSBaseVC {
|
|
@MainActor required init?(coder: NSCoder) {
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
}
|
|
|
|
+ var index:Int = 0
|
|
|
|
+ let titleStrings = ["Change image Styles".localized,"AI image generation".localized,"Ask AI anything".localized]
|
|
|
|
+ let imageStrings = ["bootPage_0","bootPage_1","bootPage_2"]
|
|
|
|
+
|
|
|
|
+ lazy var titleLabel: UILabel = {
|
|
|
|
+ let titleLabel = UILabel.createLabel(text: titleStrings.safeString(At: index),font: .font(size: 20,weight: .semibold),textColor: .themeColor,textAlignment:.center,numberOfLines: 0)
|
|
|
|
+ return titleLabel
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ lazy var continueBtn: UIButton = {
|
|
|
|
+ let continueBtn = kCreateNormalSubmitBtn(title: "Continue".localized) { [weak self] in
|
|
|
|
+ guard let self = self else { return }
|
|
|
|
+ clickContinue()
|
|
|
|
+ }
|
|
|
|
+ continueBtn.frame = CGRect(x: 0, y: 0, width: 343, height: 50)
|
|
|
|
+ continueBtn.titleLabel?.font = .font(size: 18,weight: .medium)
|
|
|
|
+ continueBtn.cornerRadius = 25.0
|
|
|
|
+ let imageView = UIImageView.createImageView(imageName: "launch_rightArrow",contentMode: .scaleToFill)
|
|
|
|
+ continueBtn.addSubview(imageView)
|
|
|
|
+ imageView.snp.makeConstraints { make in
|
|
|
|
+ make.width.height.equalTo(24)
|
|
|
|
+ make.centerY.equalToSuperview()
|
|
|
|
+ make.trailing.equalTo(-24)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return continueBtn
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ @objc func clickBtn(_ btn:UIButton){
|
|
|
|
+ if btn.tag <= 2{
|
|
|
|
+ scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(btn.tag), 0)
|
|
|
|
+ }else{
|
|
|
|
+ let vc = TSPurchaseVC()
|
|
|
|
+ vc.closePageBlock = { [weak self] in
|
|
|
|
+ guard let self = self else { return }
|
|
|
|
+ onComplete()
|
|
|
|
+ }
|
|
|
|
+ self.navigationController?.pushViewController(vc, animated: true)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let boatAnimateScrollView:TSBootImagesAnimateScrollView = TSBootImagesAnimateScrollView()
|
|
|
|
|
|
lazy var scrollView: UIScrollView = {
|
|
lazy var scrollView: UIScrollView = {
|
|
let scrollView = UIScrollView()
|
|
let scrollView = UIScrollView()
|
|
scrollView.isScrollEnabled = false
|
|
scrollView.isScrollEnabled = false
|
|
scrollView.frame = self.view.bounds
|
|
scrollView.frame = self.view.bounds
|
|
|
|
|
|
- let imageView0 = UIImageView.createImageView(imageName: "bootPage_0")
|
|
|
|
- imageView0.frame = CGRectMake(0, 0, k_ScreenWidth, k_ScreenHeight)// 813*kDesignScale)
|
|
|
|
- scrollView.addSubview(imageView0)
|
|
|
|
|
|
+
|
|
|
|
+ for (idx ,string) in imageStrings.enumerated() {
|
|
|
|
+ if idx == 1 {
|
|
|
|
+ boatAnimateScrollView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), -40.0, k_ScreenWidth, k_ScreenHeight)
|
|
|
|
+ scrollView.addSubview(boatAnimateScrollView)
|
|
|
|
+ }else{
|
|
|
|
+ let imageView = UIImageView.createImageView(imageName: string,contentMode: .scaleAspectFill)
|
|
|
|
+ imageView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
|
|
|
|
+ scrollView.addSubview(imageView)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return scrollView
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ lazy var deepseek: UIImageView = {
|
|
|
|
+ let deepseek = UIImageView.createImageView(imageName: "boot_deepseek")
|
|
|
|
+ deepseek.isHidden = true
|
|
|
|
+ return deepseek
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ override func createView() {
|
|
|
|
+ setNavBarViewHidden(true)
|
|
|
|
+ self.view.backgroundColor = .black
|
|
|
|
+ self.view.addSubview(scrollView)
|
|
|
|
|
|
- let imageView1 = UIImageView.createImageView(imageName: "bootPage_1")
|
|
|
|
- imageView1.frame = CGRectMake(k_ScreenWidth, 0, k_ScreenWidth, 813*kDesignScale)
|
|
|
|
- scrollView.addSubview(imageView1)
|
|
|
|
|
|
+ let overlayImageView = UIImageView.createImageView(imageName: "boot_overlay",contentMode: .scaleToFill)
|
|
|
|
+ overlayImageView.frame = CGRectMake(0, k_ScreenHeight-407*kDesignScale, k_ScreenWidth, 407*kDesignScale)
|
|
|
|
+ view.addSubview(overlayImageView)
|
|
|
|
+
|
|
|
|
+ deepseek.frame = CGRectMake((k_ScreenWidth-220)/2 , k_ScreenHeight-183-48, 220, 48)
|
|
|
|
+ view.addSubview(deepseek)
|
|
|
|
|
|
- let imageView2 = UIImageView.createImageView(imageName: "bootPage_2")
|
|
|
|
- imageView2.frame = CGRectMake(k_ScreenWidth*2, 0, k_ScreenWidth, 813*kDesignScale)
|
|
|
|
- scrollView.addSubview(imageView2)
|
|
|
|
|
|
+ view.addSubview(titleLabel)
|
|
|
|
+ view.addSubview(continueBtn)
|
|
|
|
+ continueBtn.snp.makeConstraints { make in
|
|
|
|
+ make.width.equalTo(continueBtn.width)
|
|
|
|
+ make.height.equalTo(continueBtn.height)
|
|
|
|
+ make.bottom.equalTo(-26-k_Height_safeAreaInsetsBottom())
|
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
|
+ }
|
|
|
|
|
|
- let btnH = k_ScreenHeight/5
|
|
|
|
- let btnTop = btnH*4
|
|
|
|
|
|
+ titleLabel.snp.makeConstraints { make in
|
|
|
|
+ make.leading.equalTo(16)
|
|
|
|
+ make.trailing.equalTo(-16)
|
|
|
|
+ make.bottom.equalTo(continueBtn.snp.top).offset(-36)
|
|
|
|
+ }
|
|
|
|
|
|
- let button0 = UIButton(frame: CGRectMake(0, btnTop, k_ScreenWidth, btnH))
|
|
|
|
- button0.tag = 1
|
|
|
|
- button0.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
|
|
|
|
- scrollView.addSubview(button0)
|
|
|
|
|
|
+ boatAnimateScrollView.startAnimation()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func clickContinue(){
|
|
|
|
+ index+=1
|
|
|
|
+ dePrint("clickContinue index=\(index)")
|
|
|
|
+ titleLabel.text = titleStrings.safeString(At: index)
|
|
|
|
|
|
- let button1 = UIButton(frame: CGRectMake(k_ScreenWidth, btnTop, k_ScreenWidth, btnH))
|
|
|
|
- button1.tag = 2
|
|
|
|
- button1.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
|
|
|
|
- scrollView.addSubview(button1)
|
|
|
|
|
|
+ deepseek.isHidden = !(index == 2)//第二页
|
|
|
|
|
|
- let button2 = UIButton(frame: CGRectMake(k_ScreenWidth*2, btnTop, k_ScreenWidth, btnH))
|
|
|
|
- button2.tag = 3
|
|
|
|
- button2.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
|
|
|
|
- scrollView.addSubview(button2)
|
|
|
|
|
|
+ if index <= 2{
|
|
|
|
+ scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(index), 0)
|
|
|
|
+ }else{
|
|
|
|
+ let vc = TSPurchaseVC()
|
|
|
|
+ vc.closePageBlock = { [weak self] in
|
|
|
|
+ guard let self = self else { return }
|
|
|
|
+ onComplete()
|
|
|
|
+ }
|
|
|
|
+ self.navigationController?.pushViewController(vc, animated: true)
|
|
|
|
+ AppDelegate.setsTopDayPopPurchase()
|
|
|
|
+ }
|
|
|
|
|
|
- return scrollView
|
|
|
|
- }()
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ func indexAdd(){
|
|
|
|
+ index+=1
|
|
|
|
+ if index > 2 {
|
|
|
|
+ index = 2
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class TSBootImagesAnimateScrollView: TSBaseView {
|
|
|
|
|
|
- @objc func clickBtn(_ btn:UIButton){
|
|
|
|
- if btn.tag <= 2{
|
|
|
|
- scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(btn.tag), 0)
|
|
|
|
- }else{
|
|
|
|
- onComplete()
|
|
|
|
- self.navBarClickLeftAction()
|
|
|
|
|
|
+ lazy var imageScroll1 = createImageScroll(imageName: "img-premium-photos-1", direction: .topToBottom)
|
|
|
|
+ lazy var imageScroll2 = createImageScroll(imageName: "img-premium-photos-2", direction: .bottomToTop)
|
|
|
|
+ lazy var imageScroll3 = createImageScroll(imageName: "img-premium-photos-3", direction: .topToBottom)
|
|
|
|
+ lazy var imageScroll4 = createImageScroll(imageName: "img-premium-photos-4", direction: .bottomToTop)
|
|
|
|
+ lazy var imageScroll5 = createImageScroll(imageName: "img-premium-photos-5", direction: .topToBottom)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ override func creatUI() {
|
|
|
|
+ contentView.clipsToBounds = true
|
|
|
|
+ contentView.addSubview(imageScroll1)
|
|
|
|
+ contentView.addSubview(imageScroll2)
|
|
|
|
+ contentView.addSubview(imageScroll3)
|
|
|
|
+ contentView.addSubview(imageScroll4)
|
|
|
|
+ contentView.addSubview(imageScroll5)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let top = 0
|
|
|
|
+ let w = 110.0
|
|
|
|
+ let h = k_ScreenHeight
|
|
|
|
+
|
|
|
|
+ //中间
|
|
|
|
+ imageScroll3.snp.makeConstraints { make in
|
|
|
|
+ make.top.equalTo(top)
|
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
|
+ make.width.equalTo(w)
|
|
|
|
+ make.height.equalTo(h)
|
|
}
|
|
}
|
|
|
|
+ //左边
|
|
|
|
+ imageScroll2.snp.makeConstraints { make in
|
|
|
|
+ make.top.equalTo(top)
|
|
|
|
+ make.trailing.equalTo(imageScroll3.snp.leading).offset(-12)
|
|
|
|
+ make.width.equalTo(w)
|
|
|
|
+ make.height.equalTo(h)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ imageScroll1.snp.makeConstraints { make in
|
|
|
|
+ make.top.equalTo(top)
|
|
|
|
+ make.trailing.equalTo(imageScroll2.snp.leading).offset(-12)
|
|
|
|
+ make.width.equalTo(w)
|
|
|
|
+ make.height.equalTo(h)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //右边
|
|
|
|
+ imageScroll4.snp.makeConstraints { make in
|
|
|
|
+ make.top.equalTo(top)
|
|
|
|
+ make.leading.equalTo(imageScroll3.snp.trailing).offset(12)
|
|
|
|
+ make.width.equalTo(w)
|
|
|
|
+ make.height.equalTo(h)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ imageScroll5.snp.makeConstraints { make in
|
|
|
|
+ make.top.equalTo(top)
|
|
|
|
+ make.leading.equalTo(imageScroll4.snp.trailing).offset(12)
|
|
|
|
+ make.width.equalTo(w)
|
|
|
|
+ make.height.equalTo(h)
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- override func createView() {
|
|
|
|
- setNavBarViewHidden(true)
|
|
|
|
- self.view.backgroundColor = .black
|
|
|
|
- self.view.addSubview(scrollView)
|
|
|
|
|
|
+ func startAnimation(){
|
|
|
|
+ kDelayMainShort {//0.1 秒后开启动画
|
|
|
|
+ self.imageScroll1.startAnimation()
|
|
|
|
+ self.imageScroll2.startAnimation()
|
|
|
|
+ self.imageScroll3.startAnimation()
|
|
|
|
+ self.imageScroll4.startAnimation()
|
|
|
|
+ self.imageScroll5.startAnimation()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func createImageScroll(imageName:String,direction:ImagesAnimateScrollView.`Direction`)->ImagesAnimateScrollView{
|
|
|
|
+ let imageScroll1: ImagesAnimateScrollView = ImagesAnimateScrollView()
|
|
|
|
+ imageScroll1.direction = direction
|
|
|
|
+ imageScroll1.animationImageName = imageName
|
|
|
|
+ imageScroll1.transform = CGAffineTransform(rotationAngle: CGFloat.pi/12)
|
|
|
|
+ return imageScroll1
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|