1. 通知栏中的今日扩展
  2. 分享扩展
  3. Action扩展
  4. 图片编辑扩展
  5. 文件管理扩展
  6. 第三方键盘扩展

注:此教程来源于http://www.raywenderlich.com的《iOS8 by Tutorials》

关于App extensions 的原理,即How extensions work

    首先App扩展是一个App功能性上的扩展,它并不独立与你原来的App,也就是说在给App Store提交的时候是打包到原有App中一起提交,它们并不是独立的App。其次,App的每一种扩展都有自己单独的API接口,如在今日扩展中,系统提供调用的是NCWidgetController.h与NCWidgetProviding.h。然后,App扩展部分并不在你App主进程,而是单独的进程,而且每一个扩展都有自己单独的进程,与在iOS上运行的App工作方式不同,一种相同的扩展可以在多进程下运行。
    为了说明扩展的运行原理,先上一张图:
其中
App Extension:被唤醒的扩展部分
Container App:被唤醒的扩展App
Host App:唤起扩展的App
Shared Container:共享的数据容器
    举个例子:当你在某个App中调用了分享功能,此App支持分享到Sina微博,这时Sina的扩展部分App Extension被唤醒,你唤醒分享功能的App叫做Host App,直到你完成分享,最后上传网络数据完成后,扩展进程被关闭。
    在扩展运行中,它都在进行一个交换数据的桥接作用,但是它并不能提供两个App进程间的通信功能,就如上图,扩展并不直接和Container App进行通信。很多时候,Container App甚至并不运行,这也保证了扩展的轻量化。
    如果扩展一定要和Container App进行通信,可以有以下几种方法:
1 //1.调用openURL(),它是UIApplication的一个方法,然而,在扩展中并没有UIApplication对象,Apple提供了新的接口:在NSExtensionContext中有下面的方法:
2 - (void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler
3 //2.建立一个shared data container:使用NSUserDefaults存取数据、直接建立一个文件负责数据存取

通知栏中的今日扩展(Today extensions)

在iOS8中开发者可以在通知栏中定制自己App的今日界面显示,如下图:

开发者在自己App中名为TodayViewController中可以自定义任意的界面显示,包括UILable、UIButton、UIImageView等等基本视图,也可以自定义TableView等复杂的视图,这里就以一个货币App做演示。
这是一个关于Bit Coin的App,首先原有App界面如下:
在App中显示今日的比特币的报价和涨跌幅度,下方显示的是过去一个月的涨跌图
我们要做的是将这个视图在通知栏中的今日扩展中展示,首先在Xcode中File—>New—>Target
之后建立你App扩展的名字,最后会出现对话框问你“if you want to “Activate BTC Widget scheme?”.
点击Activate之后会多出一个文件夹:
在这里面就是你设置今日扩展界面的vc部分,需要注意的是,新建项目中的文件可以包含原有的头文件,但你使用后Xcode就会报编译错误
此时,原来在Build Phases中只包含了TodayViewController.m,在这里需要手动添加需要的其他.m文件才可以
之后对MainInterface.storyboard进行你的界面设计,这里设置了UILabel、UIButton、UIView,和一般界面设置完全一致
然后在TodayViewController操作界面即可,直接运行即可在通知栏的今日中添加对应的扩展项目
 1 //在最后说明下NCWidgetProviding中的几个方法
 2 //下面的方法是今日扩展的刷新设置
 3 - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler {
 4     // If an error is encountered, use NCUpdateResultFailed
 5     // If there's no update required, use NCUpdateResultNoData
 6     // If there's an update, use NCUpdateResultNewData
 7   [self updateWithCurrencyData];
 8   completionHandler(NCUpdateResultNewData);
 9 }
10 //下面的方法设置界面左侧的偏移量
11 - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
12   return UIEdgeInsetsZero;//使左侧默认留白区域被填充
13 }
14 //下面的方法用于实现vibrancy特效
15 + (UIVibrancyEffect *)notificationCenterVibrancyEffect;

实现源码:源代码点击

转载于:https://www.cnblogs.com/jackma86/p/5002899.html

iOS8中添加的extensions总结(一)——今日扩展相关推荐

  1. dreamweaver后缀名_在 Dreamweaver 中添加或编辑识别的文件扩展名

    如果您要对 Dreamweaver 中的以下问题进行故障诊断,请阅读本文: 打开文件时,出现此错误消息:"找不到此文件扩展名的有效编辑器." 代码视图中的颜色编码与所需文件类型的颜 ...

  2. rails 添加外键_如何在Rails后端中添加功能强大的搜索引擎

    rails 添加外键 by Domenico Angilletta 通过多梅尼科·安吉列塔(Domenico Angilletta) In my experience as a Ruby on Rai ...

  3. 在FCKeditor 2.6中添加插入视频和音频功能

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载 在FCKeditor 2.6中添加插入视频和音频功能 这里有两种方式,一是自己修改,二是使用插件 1.自己修改 FC ...

  4. iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)

    本文转载至 http://blog.csdn.net/liuwuguigui/article/details/39494597 IOS8UIAlertViewUIActionSheet iOS8推出了 ...

  5. 在MVC 6 .NET核心应用程序中添加种子数据

    目录 目标 介绍 使用的组件 创建项目 DbInitializer类 结论 目标 就像MVC 5一样,我试图启用自动迁移和Seeding默认数据,但似乎MVC 6中的行为已经改变,所以我想分享这个提示 ...

  6. blender3.3在视频中添加文本

    使用blender 3.3导入视频文件之后(可参看参考资料[1]),有时需要在视频中添加自己想要添加的文字内容.本文简单介绍blender 3.3在视频中添加文字的方法和步骤,仅供参考. 添加文本 在 ...

  7. 前端react项目中添加Eslint校验

    当前项目目录安装npm eslint --save-dev eslint --init 生成一个.eslintrc.js文件(可自己在这个文件中进行配置) 安装 npm i eslint-config ...

  8. Asterisk在mysql数据库中添加sip账号

    Asterisk版本:15.5.0 系统版本:Ubuntu 14.04 添加sip账号有好几种方法,本文中描述的只是其中的一种方法.在网上我也找了好多配置sippeers账号的,始终没有配置成功,最后 ...

  9. hosts文件中添加地址映射

    hosts文件中添加地址映射 工作中有时候打全虚拟机的ip地址比较麻烦,可以通过修改hosts文件,增加地址映射的方式,为ip地址新增一个别名,起到快速访问指定ip的目的.同时在配置一些组件时,也可以 ...

最新文章

  1. 阿里云打好云基础 敬候电商开发者上云
  2. JVM调优:一个对象从出生到消亡过程
  3. 五、Hive架构,安装和基本使用
  4. OpenCV中Mat属性step,step1,elemSize,elemSize1
  5. 三、Numpy数组操作
  6. 计算机操作系统(5):操作系统的结构设计
  7. (二十二)访问者模式详解(伪动态双分派)
  8. Oracle 基本查询:dual、distinct、null、between and、in、like、order by、group by、dual、as
  9. VSCode使用EmmyLua调试Lua代码
  10. JTXQ、JTT部标模拟终端使用说明 --3 报警及报警附件
  11. COGS 336 Vijos 1018 NOI2003 智破连环阵
  12. 176. 第二高的薪水(SQL中的ifnull函数和limt1,1的使用)
  13. 数据结构与算法笔记:贪心策略之BSTBBST, Hashtable+Dictionary+Map, Priority Queue~Heap, Minium Spanning Tree
  14. 寒假宅喵java学习
  15. iOS开发笔记1:[转]导航栏里的Back按钮显示不出来
  16. Floxif蠕虫病毒分析与处置
  17. 专项职业能力考核计算机,专项职业能力考核项目指定试题汇编教材用书表(信息技术类)...
  18. 第一次写计算机论文无从下手怎么办?(一) - 易智编译easeediting
  19. 半导体器件基础09:MOS管特性和应用(2)
  20. 虚拟分布式交换机配置与管理

热门文章

  1. 判断当前日期是否在[startDate, endDate]区间
  2. 无人车研发实力哪家强?Google只能排第十
  3. Django中form字段操作
  4. 一个设置容器和网格布局的小技巧
  5. Ubuntu学习(应用集合、命令行以及遇到的问题)
  6. 3.9-分区表fstab
  7. css 实现兼容各浏览器的渐变效果
  8. DPM2012系列之十七:如何将备份文件恢复到网络共享文件夹
  9. mysql的半同步复制
  10. MySQL 常见面试知识点