• 【Swift】开屏广告页(代码贴走就能用)


    //
    //  LaunchADView.swift
    //  TianFeng
    //
    //  Created by Apple on 2022/5/5.
    //
    
    import Foundation
    
    import UIKit
    
    public class LaunchADView: UIView {
        let screenW = UIScreen.main.bounds.width
        let screenH = UIScreen.main.bounds.height
        
        var adImgView = UIImageView()
        var countBtn = UIButton()
        var webURL: String?
        var countTimer: Timer?
        var count: NSInteger? {
            didSet {
                RunLoop.main.add(countTimer!, forMode: RunLoop.Mode.common)
            }
        }
        var touchBlock: ((String?) -> ())?
        
        public static func show(touchBlock: @escaping ((String?) -> ())) {
            let view = LaunchADView()
            view.touchBlock = touchBlock
            view.countTimer = Timer.scheduledTimer(timeInterval: 1.0, target: view, selector: #selector(countDown), userInfo: nil, repeats: true)
            
            if let model = LaunchADModel.getLocalModel() {
                if let localPath = model.localPath {
                    do {
                        let data = try Data.init(contentsOf: localPath)
                        view.adImgView.image = UIImage.init(data: data)
                        view.countBtn.setTitle("跳过\(model.showTime)", for: .normal)
                        view.webURL = model.webURL
                        view.count = model.showTime
                        let win = UIApplication.shared.keyWindow!
                        win.addSubview(view)
                    }catch {
                        self.downloadImage(model: model)
                    }
                }else {
                    self.downloadImage(model: model)
                }
            }
        }
        
        public static func setValue(imgURL: String!, webURL: String, showTime: NSInteger) {
            if let model = LaunchADModel.getLocalModel() {
                if model.imgURL == imgURL && model.localPath != nil {
                    return
                }
            }
            
            let model = LaunchADModel()
            model.imgURL = imgURL
            model.webURL = webURL
            model.showTime = showTime
            self.downloadImage(model: model)
        }
        
        @objc func countDown() {
            guard var count = self.count else {
                return
            }
            count -= 1
            self.count = count
            countBtn.setTitle("跳过\(count)", for: .normal)
            if count == 0 {
                dismissAction()
            }
        }
        
        init() {
            super.init(frame: CGRect(x: 0, y: 0,  screenW, height: screenH))
            self.backgroundColor = UIColor.white
            
            adImgView.frame = self.bounds
            adImgView.isUserInteractionEnabled = true
            adImgView.contentMode = .scaleAspectFill
            adImgView.clipsToBounds = true
            let tap = UITapGestureRecognizer.init(target: self, action: #selector(tapAction))
            adImgView.addGestureRecognizer(tap)
            self.addSubview(adImgView)
            
            let btnW: CGFloat = 60
            let btnH: CGFloat = 30
            countBtn.frame = CGRect(x: screenW - btnW - 24, y: btnH,  btnW, height: btnH)
            countBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
            countBtn.setTitleColor(.white, for: .normal)
            countBtn.backgroundColor = UIColor.init(white: 0.2, alpha: 0.6)
            countBtn.layer.cornerRadius = 4
            countBtn.addTarget(self, action: #selector(dismissAction), for: .touchUpInside)
            self.addSubview(countBtn)
        }
        
        @objc func tapAction() {
            if let block = touchBlock {
                block(webURL)
                dismissAction()
            }
        }
        
        @objc func dismissAction() {
            countTimer!.invalidate()
            UIView.animate(withDuration: 0.3, animations: {
                self.alpha = 0
            }, completion: { (_) in
                self.removeFromSuperview()
            })
        }
        
        required public init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        static func deleteOldImg(localPath: URL?) {
            if let path = localPath {
                do {
                    try FileManager.default.removeItem(at: path)
                }catch {
                    print(error)
                }
            }
        }
        
        static func downloadImage(model: LaunchADModel) {
            DispatchQueue.global().async {
                do {
                    guard let url = URL.init(string: model.imgURL) else {
                        return
                    }
                    let data = try Data.init(contentsOf: url)
                    if let image = UIImage.init(data: data) {
                        do {
                            guard let localPath = model.localPath else {
                                return
                            }
                            try image.pngData()?.write(to: localPath)
                            print("保存成功")
                            model.save()
                        }catch {
                            print(error)
                        }
                    }
                }catch {
                    
                }
            }
        }
    }
    
    class LaunchADModel: NSObject {
        var imgURL: String!
        var webURL: String?
        var showTime = 3
        var localPath: URL? {
            get {
                if let url = URL.init(string: imgURL) {
                    let imgName = url.lastPathComponent
                    return LaunchADModel.filePath(imgName: imgName)
                }
                return nil
            }
        }
        
        static func getLocalModel() -> LaunchADModel? {
            if let dic = UserDefaults.standard.value(forKey: "LaunchADModel") as? [String : String] {
                let model = LaunchADModel()
                model.imgURL = dic["imgURL"]
                model.webURL = dic["webURL"]
                guard let timeString = dic["showTime"], let showTime = NSInteger(timeString) else {
                    return nil
                }
                model.showTime = showTime
                return model
            }
            return nil
        }
        
        func save() {
            let dic = ["imgURL" : imgURL, "webURL" : webURL!, "showTime" : "\(showTime)"] as [String : String]
            UserDefaults.standard.set(dic, forKey: "LaunchADModel")
        }
        
        static func filePath(imgName: String) -> URL {
            let cachesPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!
            let imgPath = URL.init(fileURLWithPath: cachesPath).appendingPathComponent(imgName)
            return imgPath
        }
        
        func deleteOldImage() {
            if let localPath = self.localPath {
                do {
                    try FileManager.default.removeItem(at: localPath)
                }catch {
                    
                }
            }
        }
    }

      使用代码:

    func showAdView() {
            LaunchADView.setValue(imgURL: "https://img1.baidu.com/it/u=1606318557,2820010278&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889", webURL: "https://www.baidu.com", showTime: 10)
    
            //  用于显示启动页。若启动数据更新,则将在下次启动后展示新的启动页
            LaunchADView.show { (url) in
                let vc = WebView()
                vc.url = url
                self.navigationController?.pushViewController(vc, animated: true)
            }
        }

      效果截图:

      
  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/xjf125/p/16225440.html
Copyright © 2020-2023  润新知