2015年2月16日 星期一

UIApplication初探

本文分享如何使用UIApplication,每個App都會有一個UIApplication實體,不需要建立,而是透過sharedApplication方法取得。

取得UIApplication實體


var currentApp = UIApplication.sharedApplication();

Local and Push Notification


當App在背景執行時,也能主動通知使用者,此為Local and Push Notification;因需較為深入探討,再撰寫專文介紹,可先參考如下連結。

開啟超連結


要在App中開啟超連結,可以用openURL方法,參考以下程式碼。

let url = "http://google.com"

let param:NSURL = NSURL(string:url)!

UIApplication.sharedApplication().openURL(param)

除了開啟超連結外,也可以用此方法來打電話、傳簡訊、FaceTime…等;詳細可參考Apple URL Scheme Reference,整理範例如下。

Links類型
範例
Email
mailto:web@kunhsiang.com
Phone
tel:1-408-555-5555
FaceTime
facetime://user@example.com
SMS
sms:1-408-555-1212
Map
http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino
iTunes
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441
Youtube
http://www.youtube.com/watch?v=VIDEO_IDENTIFIER

openURL不僅可以開啟常用的應用程式,它更是應用程式間溝通的方式,我們可以自訂URL用來開啟別的App並且傳遞參數,以下面URL其中todolist是代表的應用程式名稱,後面是參數,詳細可參考Using URL Schemes to Communicate with Apps

todolist://www.acme.com?Quarterly%20Report#200806231300

移除Statusbar


可以將App上方的Statusbar移除,方法有兩種,一種是從Application的角度來實作,另一種則是則從ViewController角度來實作。

從Application角度來實作,先在Application加入Key為View controller-based status bar appearance,Value為No;然後在AppDelegate加入以下程式碼。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
       application.statusBarHidden = true
       return true
}

從ViewController角度來實作較為簡單,直接在ViewController加入程式碼。

override func prefersStatusBarHidden() -> Bool {
   return false
}

或是

override func  preferredStatusBarStyle() -> UIStatusBarStyle {
       return UIStatusBarStyle.LightContent
}

應用程式狀態


UIApplication物件可以用applicationState方法取得目前App的狀態,分為Active、InActive及Background;簡單來說Active是App在前景執行,並且能接收事件、InActive也是在前景執行,但是無法接收事件,可能被來電中斷或是正在執行某段程式碼正在等待中、Background則是按下Home鍵後App會在背景執行。

var AppStatus = ""
       
if (currentApp.applicationState == UIApplicationState.Active)
{
 AppStatus = "Application Status:Active"
}
else if (currentApp.applicationState == UIApplicationState.Inactive)
{
 AppStatus = "Application Status:Inactive"
}
else if (currentApp.applicationState == UIApplicationState.Background)
{
 AppStatus = "Application Status:Background"
}

搖晃偵測


UIApplication可用來設定是否能偵測搖晃,屬性如下。

app.applicationSupportsShakeToEdit = YES;

但是實際上可從ViewController來實作為佳,參考以下程式碼。

   override func viewDidAppear(animated: Bool) {
       super.viewDidAppear(animated)
       self.becomeFirstResponder()
   }
   
   override func canBecomeFirstResponder() -> Bool {
       return true
   }
   
   override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
       if(event.subtype == UIEventSubtype.MotionShake) {
           var alert = UIAlertController(title: "Shaken",
               message: "Not Stirred",
               preferredStyle: UIAlertControllerStyle.Alert)
           alert.addAction(UIAlertAction(title: "OK",
               style: UIAlertActionStyle.Default, handler: nil))
           self.presentViewController(alert, animated: true, completion: nil)
       }
   }


關閉自動睡眠


iPhone/iPad在一段時間未使用時,因為省電的原因會自動進入睡眠狀態,若要關閉自動睡眠功能可用以下屬性。

application.idleTimerDisabled = true

網路狀態指示


可顯示或移除網路狀態指示,運用以下屬性。

application.networkActivityIndicatorVisible = false

沒有留言:

張貼留言