iOS之widget

A訫飛Flyme發表於2017-12-20

今天偶爾搗鼓手機,翻出這幾個東西,就想做下,不廢話上圖。

1
2
3
最後一個最醜的就是我做的,沒錯最醜那個,沒毛病?。 #準備 iOS extension的出現,方便了使用者檢視,比如使用者可以在Today的widgets中檢視應用的某些資訊,然後點選進入相關的應用介面。

  • 新增Today Extension (什麼?你沒找到,建立target會吧,就是那。)
    w1.png
  • 程式碼書寫
//很清楚簡單,直接貼出來,其他的可以在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等哪種資料儲存或操作方式,只需要將路徑指向共享的容器路徑就可以。

App Groups

  • 完整程式碼 Demo

結束

相關文章