因此,我正在为我的应用创建自定义启动首页。我正在使用计时器导航到下一个屏幕。但是我的问题是关于我的第一页。启动应用程序时,我希望所使用的图像立即显示。我什至不确定这是否是一个选择。因为我看到的所有应用程序在启动时都需要一些时间才能加载。我想知道这是否是图像出现延迟的原因,还是我可以采取措施使其立即显示?我在下面附加了我的代码:
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)
}
}
答案 0 :(得分:0)
您可以尝试将代码从viewDidAppear
移至viewWillLayoutSubviews
。
但是请注意,在用户点击应用程序的图标与显示第一个屏幕之间,总是会有 延迟。这就是为什么要使用LaunchScreen.storyboard的原因-延迟期间将显示该内容。因此,也许您应该将图像放在LaunchScreen.storyboard中。请注意,您不能与LaunchScreen.storyboard一起运行任何 code 。
答案 1 :(得分:0)
将代码移至 viewDidLoad 会更好。
在UIViewController
生命周期内,仅调用一次 viewDidLoad 。
虽然viewDidAppear可能会被调用多次。
由于您使用的是自动布局,因此您无需关心正确的子视图大小,只需将代码移至 viewDidLoad 即可,这样就可以解决您所要求的延迟问题。