Swift 使用淡出图像在IOS应用程序中创建自定义启动页面

Swift 使用淡出图像在IOS应用程序中创建自定义启动页面,swift,animation,fade,Swift,Animation,Fade,因此,我正在为我的应用程序制作一个自定义启动首页。我用计时器导航到下一个屏幕。然而,我的问题是关于我的第一页。当我启动应用程序时,我希望我正在使用的图像立即出现。我甚至不确定这是否是一种选择。因为我看到的所有应用程序在启动时都需要一些时间才能加载。我想知道这是否是图像出现延迟的原因,或者我可以采取措施使其立即出现?我已在下面附上我的代码: import UIKit class LaunchViewController: UIViewController { override func

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

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)
    }

}

您可以尝试将代码从ViewDidDisplay移动到ViewWillLayoutSubView


但是请注意,在用户点击应用程序图标和出现第一个屏幕之间始终存在延迟。这就是为什么你有一个LaunchScreen.storyboard——它是在延迟期间显示的内容。所以也许你应该把你的图像放到LaunchScreen.storyboard中。请注意,您不能将任何代码与LaunchScreen.storyboard一起运行。

最好将代码移动到viewDidLoad。 viewDidLoad在UIViewController生命周期中仅调用一次。 而ViewDidDisplay可能会被调用多次


因为您使用的是Autolayout,所以不需要关心子视图的大小是否正确,将代码移动到viewDidLoad应该足够了,并且它应该可以解决您所询问的延迟问题。

好的,我必须离开我的计算机。我会在几个小时后回来,让你知道。感谢您的快速响应,我将代码移到了您建议的位置,当应用程序在我的图像显示之前加载时,我仍然会看到一个空白页:那么您没有共享足够的信息。尝试从一个完全空白的单视图应用程序项目模板开始复制此问题,如果可以,请向我们描述如何查看您看到的问题。好的,我今天稍后将尝试您的方法,并让您知道。我记得我确实试过didload,但没有按照我想要的方式工作。我再给它一张照片,你需要在viewDidLoad中添加imageView。但是,您需要在ViewDid出现时启动计时器。我认为在UIViewController的不同方法中启动计时器和添加imageView是行为不一致的原因。您现在正在启动计时器,然后再添加imageView。