在我的IOS应用程序中创建一个带有淡出图像的自定义启动页面

时间:2019-01-03 13:22:32

标签: swift animation fade

因此,我正在为我的应用创建自定义启动首页。我正在使用计时器导航到下一个屏幕。但是我的问题是关于我的第一页。启动应用程序时,我希望所使用的图像立即显示。我什至不确定这是否是一个选择。因为我看到的所有应用程序在启动时都需要一些时间才能加载。我想知道这是否是图像出现延迟的原因,还是我可以采取措施使其立即显示?我在下面附加了我的代码:

import UIKit

class LaunchViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {

    }
    override func viewDidLoad() {
        super.viewDidLoad()
        let gameTimer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: false)
    }
    override func viewDidAppear(_ animated: Bool) {
        let imageView = UIImageView()
        imageView.image = UIImage(named: "image1")
        self.view.addSubview(imageView)

        imageView.fadeOut()
        imageView.contentMode = .scaleAspectFit
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        imageView.topAnchor.constraint(equalTo: view.topAnchor,constant:20).isActive = true
        imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor,constant:30).isActive = true
        imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor,constant:10).isActive = true
        imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor,constant:10).isActive = true
    }

    @objc func runTimedCode()
    {
        self.performSegue(withIdentifier: "fromLaunch", sender: self)
    }
}
extension UIView {

    func fadeIn(){
        UIView.animate(withDuration: 3.0, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
            self.alpha = 1.0
        }, completion: nil)
    }

    func fadeOut(){
        UIView.animate(withDuration: 2.0, delay: 1.0, options: UIView.AnimationOptions.curveEaseOut, animations: {
            self.alpha = 0.0
        }, completion: nil)
    }

}

2 个答案:

答案 0 :(得分:0)

您可以尝试将代码从viewDidAppear移至viewWillLayoutSubviews

但是请注意,在用户点击应用程序的图标与显示第一个屏幕之间,总是会有 延迟。这就是为什么要使用LaunchScreen.storyboard的原因-延迟期间将显示该内容。因此,也许您应该将图像放在LaunchScreen.storyboard中。请注意,您不能与LaunchScreen.storyboard一起运行任何 code

答案 1 :(得分:0)

将代码移至 viewDidLoad 会更好。 在UIViewController生命周期内,仅调用一次 viewDidLoad 。 虽然viewDidAppear可能会被调用多次。

由于您使用的是自动布局,因此您无需关心正确的子视图大小,只需将代码移至 viewDidLoad 即可,这样就可以解决您所要求的延迟问题。