登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

Swift简单实现启动屏动画

[复制链接]
来自: zyphs21 分类: iOS精品源码 上传时间: 2017-12-15 11:03:04
Tag:

项目介绍:

准备工作:

首先我们需要确定作为宣传的图片的宽高比,这个一般是与 UI 确定的。一般启动屏展示会有上下两部分,上面是宣传图片,下面是 App 的 Logo。

实现基本思路:

在 LaunchScreen 结束后,在 AppDelegate 中将 rootViewController 指向展示广告用的 AdViewController,在AdViewController 中设置一段时间后自己销毁,并提供回调方法在 AppDelegate 中将 rootViewController 指向 App 真正的首页。

实现细节:

新建一个 AdViewController 用于放置广告宣传等展示.注意有一个回调方法。

class AdViewController: UIViewController {
    
    // 用于 AdViewController 销毁后的回调
    var completion: (() -> Void)?
    
    var adImage: UIImage?
    var adView: UIImageView?
    
    override func viewDidLoad() {
        // ....
    }
}

在 ViewDidLoad 方法中配置广告图,同时判断 iPhoneX的特殊情况

override func viewDidLoad() {
    super.viewDidLoad()
    
    var adViewHeight = (1040 / 720) * screenWidth
    var imageName = "start_page"
    if UIDevice.isiPhoneX() {
        adViewHeight = (1920 / 1124) * screenWidth
        imageName = "start_page_x"
    }
    
    adView = UIImageView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: adViewHeight))
    adView?.image = UIImage(named: imageName)
    adView?.contentMode = .scaleAspectFill
    self.view.addSubview(adView!)
    
    let bottomHolderView = UIView(frame: CGRect(x: 0, y: screenHeight-120, width: screenWidth, height: 120))
    self.view.addSubview(bottomHolderView)
        

    let logo = UIImageView(frame: CGRect(x: (screenWidth-120)/2, y: (120-50)/2, width: 120, height: 50))
    logo.image = UIImage(named: "start_logo")
    bottomHolderView.addSubview(logo)
    
    let time: TimeInterval = 1.0
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
        self.dismissAdView()
    }
}

上面代码中有几个注意的:

因为图片要撑满屏幕的宽度,所以宽度是固定的,根据图片的高宽比,算出图片实际应有的高度,这样图片可以在各个尺寸的 iPhone 中才不会因为拉伸而变形。但是因为 iPhoneX 特殊的宽高比,所以还是要为它特定一张图片,不然即使图片在 iPhoneX 上不变形,图片所占的高度会太小,或者顶部被刘海遮挡内容而不美观。

var adViewHeight = (1040 / 720) * screenWidth
var imageName = "start_page"
if UIDevice.isiPhoneX() {
    adViewHeight = (1920 / 1124) * screenWidth
    imageName = "start_page_x"
}

上面判断是否为 iPhoneX 我是在 UIDevice 里扩展了一个方法:

extension UIDevice {
    public static func isiPhoneX() -> Bool {
        if UIScreen.main.bounds.height == 812 {
            return true
        }
        return false
    }
}

还有注意在执行销毁时调用回调方法

let time: TimeInterval = 1.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
    self.dismissAdView()
}

在 AppDelegate 中 didFinishLaunchingWithOptions 方法中调用下面的 setUpWindowAndRootView() 来管理页面展示

extension AppDelegate {
    
    func setUpWindowAndRootView() {
        window = UIWindow(frame: UIScreen.main.bounds)
        window!.backgroundColor = UIColor.white
        window!.makeKeyAndVisible()
        
        let adVC = AdViewController()
        adVC.completion = {
            let vc = ViewController()
            vc.adView = adVC.view
            self.window!.rootViewController = vc
        }
        window!.rootViewController = adVC
    }
}

注意在 AdViewController 销毁的回调方法中,将 AdViewController 的 view 传给真正的首页,让首页来执行动画

adVC.completion = {
    let vc = ViewController()
    // 将 AdViewController 的 view 传给真正的首页,让首页来执行动画
    vc.adView = adVC.view
    self.window!.rootViewController = vc
}

在首页 ViewController 里我们有如下方法来执行 AdViewController 的销毁动画,这里配置的动画是常见的扩大渐变消失

private var advertiseView: UIView?
    var adView: UIView? {
        didSet {
            advertiseView = adView!
            advertiseView?.frame = self.view.bounds
            self.view.addSubview(advertiseView!)
            UIView.animate(withDuration: 1.5, animations: { [weak self] in
                self?.advertiseView?.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
                self?.advertiseView?.alpha = 0
            }) { [weak self] (isFinish) in
                self?.advertiseView?.removeFromSuperview()
                self?.advertiseView = nil
            }
        }
    }

至此,一个简单的启动屏动画就完成了。
可以到 我的博客myhanson 查看
代码在 Github 上: SplashAnimate

相关源码推荐:

我来说两句
*滑动验证:
所有评论(65)
zyphs21 2017-12-15 11:06:50
感谢分享,Code4App有你更精彩
回复
AlonMessi 2017-12-15 18:26:24
好好 学习了 确实不错
回复
kengsir 2017-12-15 18:28:51
膜拜大神~
回复
littleRed 2017-12-15 18:33:19
感谢大神~
回复
BlueManlove 2017-12-15 18:35:54
感谢大神~
回复
hellokenken 2017-12-15 18:48:40
感谢大神分享,必须顶!
回复
code4app热心网友 2017-12-15 22:29:22
正需要啊,感谢楼主无私分享!
回复
code4app热心网友 2017-12-16 09:58:22
学习学习!
回复
code4app热心网友 2017-12-16 12:19:21
精华内容,楼主V5!
回复
提取码:  下载次数:54 状态:已购或VIP 售价:0(原价:15)金钱 下载权限:初级码农 
1259 0 54
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表