在Swift中用定时任务显示Splash页面

在上一节中,我们用Swift实现了Splash页面的显示,但是仅仅显示Splash页面是不够的,我们需要显示Splash页面2秒,然后跳转到下一个页面,因此需要实现定时任务的功能。在Android中,我们采用了系统的函数postDelayed来实现这一功能,在IOS系统中,我们需要使用GCD。

首先我们简单了解一下GCD。我们知道,对于手机而言,多核CPU用得越来越多,这样真正的多任务就是益成为现实,因为每个CPU核都可以独立地执行单独的任务。GCD正是为了使程序员更方便地使用多核CPU而引入的技术。GCD的英文全称为Grand Central Dispath,是一个底层C API。GCD会根据多核CPU和硬件特性,创建最佳的线程池,应用程序员只需向GCD提交任务,并规定这些任务的属性,如同步、异步、延时等,然后由GCD统一安排这些任务到合适的线程来执行。

在GCD中有一个dispath_after方法,可以实现延时执行一个任务的功能,我们可以使用该函数来实现Splash页面显示2秒,然后跳转到其他页面的功能。

为了实现Splash页面的延时跳转,我们需要首先定义一个Splash跳转的目标页面,这里是我们定义的应用介绍页面。

注意,实际上,当Splash页面闪过时,会首先判断应用是否是第一次运行,如果是第一次运行,则显示应用介绍页面,如果不是第一次运行且已经登录,则直接进入应用主页,如果不是第一次运行且没有登录,则进入登录页面,通常登录页面还有注册链接,引导新用户前往注册。在这里,我们暂时前不考虑这些业务逻辑,只是在Splash页面闪过之后,直接进入应用介绍页面。

首先,我们在WkyLib中定义应用介绍页面基类WKYAppTourView.swift,这里只有一个Label,只是为了有一个跳转目标页面而已

import UIKitpublic class WKYAppTourView{public init(rootView: UIView) {let testLabel = UILabel(frame: CGRectMake(0.0, 0.0, 120.0, 240.0))testLabel.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)testLabel.text = "Hello!"rootView.addSubview(testLabel)}}

再定义WKYAppTourViewController.swift

import UIKitpublic class WKYAppTourViewController: UIViewController{override public func viewDidLoad() {super.viewDidLoad()let rootView = self.view}override public func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}public var appTourView: WKYAppTourView?}

在WkgJys工程中定义WKYAppTourView的子类JYSAppTourView.swift

import UIKitimport WkyLibclass JYSAppTourView: WKYAppTourView{override init(rootView: UIView) {super.init(rootView: rootView)}}

定义WKYAppTourViewController的子类JYSAppTourViewController

import UIKitimport WkyLibclass JYSAppTourViewController: WKYAppTourViewController{override func viewDidLoad() {super.viewDidLoad()appTourView = JYSAppTourView(rootView: self.view)}}写完上述代码后,将AppDelegate.swift中的application方法中启动的ViewController换成JYSAppTourViewController类(仅用于测试我们跳转目标页面能够正常显示,稍后我们还将改回Splash页面),代码如下所示:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {// Override point for customization after application launch.window = UIWindow(frame: UIScreen.mainScreen().bounds)//window?.rootViewController = JYSAppSplashViewController()window?.rootViewController = JYSAppTourViewController()window?.makeKeyAndVisible()return true}这时运行WkgJys工程,如果出现红底黑字的Hello文字,就证明上述代码没有问题了,就可以接着向下进行了。

首先将AppDelegate.swift中启动ViewController改回JYSAppSplashViewController。

然后修改JYSAppSplashViewController.viewDidAppear方法,加入使用GCD技术的延时任务代码,如下所示:

override func viewDidAppear(animated: Bool) {super.viewDidAppear(animated)// delay tasklet delayInSeconds = 5.0let delayInNanoSeconds = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))let currentQueue = dispatch_get_main_queue()dispatch_after(delayInNanoSeconds, currentQueue, {//self.changeRootViewController()println("Delay in \(delayInSeconds) seconds")})}

运行WkgJys工程,在工程启动10秒之后,会在控制台上打出Delay in 10 seconds文字。这里需要注意,由于我们要进行UI相关操作,因此需要使用主线程来执行,因此调用了dispatch_get_main_queue()方法。

好了,现在可以开始实现在延时任务里启动JYSAppTourViewController了。通常ViewController的切换是使用Storyboard的segue方式切换,另一种方式是用NavigationController来控制切换,由于我们不采用Storyboard,所以不能使用Storyboard相关方法,而使用NavigationController时,界面上部会有一个导航条,与我们的全屏显示有矛盾,因此需要采用其他方式来实现。

首先,我们需要将延时任务的代码从viewDidLoad方法移到viewDidAppeare方法中,代码如下所示:

func changeRootViewController() {let appTourViewController = JYSAppTourViewController()self.dismissViewControllerAnimated(true, completion: nil)self.view.window?.rootViewController = appTourViewControllerself.view.window?.makeKeyAndVisible()}

这样运行一下WkgJys工程,应可以看到Splash页面显示5秒后,就切换到红底黑字的临时界面了。

Splash页面实现就基本完成了,下一节我们将回到Android系统,讲述怎样实现一屏一屏滑动显示的应用介绍页面,,在这里,我们还会谈到怎样识别是否是应用第一次运行,以及信息持久化存储的方式。

华丽的分隔线******************************************************************************************************************************************************************************希望大家多支持,有大家的支持,我才能走得更远,谢谢!银行账号:622202 0200 1078 56128 闫涛我的支付宝:yt7589@hotmail.com

版权声明:本文为博主原创文章,未经博主允许不得转载。

请打开窗口,让我的灵魂与你的灵魂相拥。

在Swift中用定时任务显示Splash页面

相关文章:

你感兴趣的文章:

标签云: