今天偶爾搗鼓手機,翻出這幾個東西,就想做下,不廢話上圖。
最後一個最醜的就是我做的,沒錯最醜那個,沒毛病?。 #準備 iOS extension的出現,方便了使用者檢視,比如使用者可以在Today的widgets中檢視應用的某些資訊,然後點選進入相關的應用介面。- 新增Today Extension (什麼?你沒找到,建立target會吧,就是那。)
- 程式碼書寫
//很清楚簡單,直接貼出來,其他的可以在storyboard自己設定
//通過extensionContext藉助host app調起app
[self.extensionContext openURL:[NSURL URLWithString:@"widgetsam://sam..."] completionHandler:^(BOOL success) {
NSLog(@"open url result:%d ? %d",success ,testNumber);
}];
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//新增摺疊效果
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
}
-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
/**
iOS10以後,重新規定了Today Extension的size。寬度是固定(例如在iPhone6上是359),所以無法改變;但是高度方面,提供了兩種模式:
NCWidgetDisplayModeCompact:固定高度,則為110
NCWidgetDisplayModeExpanded:可以變化的高度,區間為110~616
*/
if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 110);
} else {
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 250);
}
}
複製程式碼
- 關於資料共享 擴充套件與宿主App是隔離的,那麼資料共享就需要使用App Groups。
在App主Target的Capabilities欄,找到App Groups項,開啟功能,並點選“+”符號新增一個共享的資料容器名稱,例如group.xxx。然後會發現主Target和擴充套件Target目錄中都生成了一個entitlements型別檔案,記錄了一個App Groups項。 這個共享的容器,就是存放擴充套件和宿主App共用的資料的空間。 為了正常編譯,還需要前往開發者中心,編輯主應用和擴充套件的AppID,開啟支援App Groups功能,類似於開啟推送功能。 配置完成後,就是使用了。不管是採用UserDefaults、Archive、CoreData、FMDB、LevelDB等哪種資料儲存或操作方式,只需要將路徑指向共享的容器路徑就可以。
- 完整程式碼 Demo
結束