Xcode允许通过Interface Builder在.xib
文件中创建启动屏幕。是否可以使用xib执行一些代码,就像在通常的视图控制器中一样?如果我们可以在app启动时设置不同的文本/图像/等,那就太棒了。
答案 0 :(得分:40)
不,这是不可能的。
当显示启动屏幕时,您的应用将处于加载状态。
显示启动屏幕时,即使- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
也不会完全执行。
很明显,您无法访问自己的应用,因此此时您无法执行任何代码。
答案 1 :(得分:4)
我试图在这里做同样的事情。 :)
我真的很喜欢一些应用程序,每次应用程序启动时,它们都会动态发送一些动态问候文本和图像,例如“你今天看起来很棒!”,“今天是星期五,美好的一天”等等,这很可爱。
我做了一些搜索,下面是如何做到的: (我的代码是XCode 7,带有launchscreen.xib文件)
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var customizedLaunchScreenView: UIView?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
application.statusBarHidden = true
// customized launch screen
if let window = self.window {
self.customizedLaunchScreenView = UIView(frame: window.bounds)
self.customizedLaunchScreenView?.backgroundColor = UIColor.greenColor()
self.window?.makeKeyAndVisible()
self.window?.addSubview(self.customizedLaunchScreenView!)
self.window?.bringSubviewToFront(self.customizedLaunchScreenView!)
UIView.animateWithDuration(1, delay: 2, options: .CurveEaseOut,
animations: { () -> Void in
self.customizedLaunchScreenView?.alpha = 0 },
completion: { _ in
self.customizedLaunchScreenView?.removeFromSuperview() })
}
return true
}
// other stuff ...
}
只需在此处的 customizeLaunchScreenView 中执行您想要显示的内容,文本,图像,动画等。
在发布结束时,只需使用alpha值更改淡出此自定义UIView,然后将其完全删除。
那有多酷?我非常喜欢它!
希望它有所帮助。
答案 2 :(得分:0)
我也在努力实现这一目标。我尝试了以下内容,它延迟了几秒钟,但对我有用。
希望它有所帮助!
答案 3 :(得分:0)
语言:Swift 4
您好,这是使用xib启动屏幕的解决方案。
在项目中添加名为LaunchView的新类,然后在项目中将有一个新文件LaunchView.swift。
转到LauchImage.xib将类设置为LaunchView(这是您的新类)。
添加一些代码,并阅读一些信息,这些内容显示在LaunchView.swift中。这是我的代码,用于在启动屏幕上显示应用程序的版本。
class LaunchView: UIView {
lazy var versionLabel: UILabel = {
let label = Factory.label(style: LabelStyle.custom(font: .regular, size: 10, color: .other(ColorUtility.versionGray)), mutiLine: false, textAlignment: .center)
label.text = "ver \(Constants.appVersion)"
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
nibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
nibSetup()
}
private func nibSetup() {
addSubview(versionLabel)
versionLabel.snp.makeConstraints { (make) in
make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom).offset(-6)
make.centerX.equalToSuperview()
}
}
}