[iOS]Swift-启动页动画

从开发者角度讲app启动当然越快越好,但是有时候总有些奇葩需求。比如,让启动页故意延时、在启动页上加个动画等等。下面我们来实现一个启动页动画。##

启动页动画

  1. 创建一个启动页文件

a: 创建iOS工程的时候默认会有个LaunchScreen.storyboard文件作为静态启动页,这里我们不用它,我们创建一个LaunchScreen.xib文件作为静态启动页。这里就不用详细说明怎么创建xib了。。。注意一下命名!!!

b:创建好LaunchScreen.xib之后,在文件中添加一个UIImageView设置好你的启动页图片。

c:删除LaunchScreen.storyboard文件

此时编译运行你就可以看到静态启动页了

  1. 代码相关

思路: 在苹果粑粑的设计中,启动页应该就只是需要一张静态图就ok了,毕竟对用户使用来说,app启动越快越好。因此没有常规的方法实现启动页动画。我的想法是在启动后获取到启动页的内容然后将其填充到一个 UIViewController 中,再构建相关动画。下面说具体步骤

a: 创建 UIViewController 文件

//获取启动页文件名
lazy var launchName : String = {
        let tempLaunchName = Bundle.main.infoDictionary!["UILaunchStoryboardName"] as! String
        return tempLaunchName
    }()
//将启动页内容,并生成UIImageView
lazy var launchView : UIImageView = {
        let viewCopy = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self.view)) as! UIView
        let window = UIApplication.shared.keyWindow
        window?.addSubview(viewCopy)        
UIGraphicsBeginImageContextWithOptions(UIScreen.main.bounds.size, true, 0.0)
        viewCopy.layer.render(in: UIGraphicsGetCurrentContext()!)
        viewCopy.removeFromSuperview()
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        let launchView = UIImageView.init(image: image)
        launchView.frame = UIScreen.main.bounds
        return launchView
    }()
//构建view,并将launchView添加进去
override func viewDidLoad() {
        super.viewDidLoad()
        NSKeyedArchiver.archivedData(withRootObject: self.view)
        let app : UIApplication = UIApplication.shared;
        self.view = UINib.init(nibName: self.launchName, bundle: nil).instantiate(withOwner: self, options: nil).first as! UIView;
        self.view.layoutIfNeeded()
        app.keyWindow?.addSubview(self.launchView)
    }
override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
         //TODO 启动页相关动画
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.5) {
        //动画结束执行相关跳转逻辑
            self.goToNextPage()
        }
    }
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        if #available(iOS 9.0, *) {
        }else{
            self.window = UIWindow.init(frame: UIScreen.main.bounds)
        }
        let launchViewController = XBLaunchViewController.init();
        self.window?.rootViewController = launchViewController;
        self.window?.makeKeyAndVisible()
        return true
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,200评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,205评论 30 471
  • 刚刚看了猫老师的一些文章,感觉挺有启发的。他的文字非常简单口语化,基本都是短语。看他的文章就像一个人在对你说话一样...
    自由之路阅读 192评论 0 0
  • “工整病历成网红”的背后是一份责任心 作者:白峰 ​ 对于病历,每个人心目中的是字迹潦草,更是一份天书,让病人看不...
    读写人家阅读 478评论 0 0
  • 关于目录的size计算,我在网上查了很多种方式去实现过,最常见的就是通过递归方式去逐层计算,但通过测试发现在计算层...
    梦之旅_e217阅读 388评论 0 0