Swift gif动态启动页面

创建一个自定义的视图LaunchImageView(UIImageView),在自定义视图中,加载gif图


class LaunchImageView: UIImageView {  
    lazy var startUpimageView: UIImageView = {
        let startUpimageView = UIImageView.init()
        startUpimageView.contentMode = .scaleAspectFit
        startUpimageView.backgroundColor = UIColor.white
        self.addSubview(startUpimageView)
        return startUpimageView
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        startUpimageView.frame = CGRect(x: 0, y: 0, width: 160, height: 160)
        startUpimageView.ht_startGifWithImageName(name: "launch_image")
        startUpimageView.center = self.center
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}
extension UIImageView {
    //MARK:工程内gif
    public func ht_startGifWithImageName(name:String) {
        guard let path = Bundle.main.path(forResource: name, ofType: "gif") else {
            print("SwiftGif: Source for the image does not exist")
            return
        }
        self.ht_startGifWithFilePath(filePath: path)
    }
    
    //MARK:实现动图效果
    public func ht_startGifWithFilePath(filePath:String) {
        //1.加载GIF图片,并转化为data类型
        guard let data = NSData(contentsOfFile: filePath) else {return}
        //2.从data中读取数据,转换为CGImageSource
        guard let imageSource = CGImageSourceCreateWithData(data, nil) else {return}
        let imageCount = CGImageSourceGetCount(imageSource)
        //3.遍历所有图片
        var images = [UIImage]()
        var totalDuration : TimeInterval = 0
        for i in 0..<imageCount {
            //3.1取出图片
            guard let cgImage = CGImageSourceCreateImageAtIndex(imageSource, i, nil) else {continue}
            let image = UIImage(cgImage: cgImage)
            images.append(image)
            
            //3.2取出持续时间
            guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil) as? NSDictionary  else {continue}
            guard let gifDict = properties[kCGImagePropertyGIFDictionary]  as? NSDictionary else  {continue}
            guard let frameDuration = gifDict[kCGImagePropertyGIFDelayTime] as? NSNumber else {continue}
            totalDuration += frameDuration.doubleValue
            
        }
        
        //4.设置imageview的属性
        self.animationImages = images
        self.animationDuration = totalDuration
        self.animationRepeatCount = 1
        //5.开始播放
        self.startAnimating()
        
    }
    
    public func ht_imageStopAnimating() {
        self.stopAnimating()
    }
}

随后在AppDelegate里面,设置优先加载动态图

//MARK: - 启动页
    func addLaunchImageView() {
        self.window?.makeKeyAndVisible()
        let launchImageView = LaunchImageView.init(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WHIDTH(), height: SCREEN_HEIGHT()))
        launchImageView.backgroundColor = UIColor.white
        self.window?.addSubview(launchImageView)
        self.window?.bringSubview(toFront: launchImageView)
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            UIView.animate(withDuration: 0.5, animations: {
                launchImageView.alpha = 0
            }, completion: {[weak self] (finished:Bool) in
                launchImageView.removeFromSuperview()
                ///进入主页面
            })
        }
    }

转载于:https://www.jianshu.com/p/efdd6b226f8f

猜你喜欢

转载自blog.csdn.net/weixin_33984032/article/details/91163477