你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> OS---在Swift中用定時任務顯示Splash頁面

OS---在Swift中用定時任務顯示Splash頁面

編輯:IOS開發綜合

我們用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 UIKit

public 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 UIKit

public 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 UIKit
import WkyLib

class JYSAppTourView: WKYAppTourView
{
    override init(rootView: UIView) {
        super.init(rootView: rootView)
    }
}

 

定義WKYAppTourViewController的子類JYSAppTourViewController

 

import UIKit
import WkyLib

class 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 task
    let delayInSeconds = 5.0
    let 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 = appTourViewController
    self.view.window?.makeKeyAndVisible()
}

 

這樣運行一下WkgJys工程,應可以看到Splash頁面顯示5秒後,就切換到紅底黑字的臨時界面了。

 

Splash頁面實現就基本完成了,下一節我們將回到Android系統,講述怎樣實現一屏一屏滑動顯示的應用介紹頁面,在這裡,我們還會談到怎樣識別是否是應用第一次運行,以及信息持久化存儲的方式。

 

 

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved