iOS之widget

今天偶尔捣鼓手机,翻出这几个东西,就想做下,不废话上图。


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

结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在说widget开发前,先来了解下APP Extensions和App Groups: 一、关于App Exten...
    P大迷妹阅读 4,420评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 7:20起床 7:20-7:30洗漱 7:30-7:45化妆 7:45-7:55早餐 8:00出门 19:30-2...
    40680fb378ba阅读 354评论 1 1
  • 进程和线程都是操作系统概念(操作系统负责实现) 进程 进程是程序的一次实现 线程 线程是程序执行流的最小单元 一个...
    shijianwei阅读 442评论 0 0
  • 再说:社会认同,喜好,权威,短缺。其实都很好理解,但是就是没有被总结过,或写的没有如此让你清澈。 社会认同原理:人...
    cartzhang阅读 167评论 0 0