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

  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;

实现源码:源代码点击

时间: 2024-12-26 18:27:08

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

iOS8中添加的extensions总结(二)

分享扩展 注:此教程来源于http://www.raywenderlich.com的<iOS8 by Tutorials> 1.准备 这次例子来源于国外的图片分享网站Imgur.com 首先现在Imgur上注册你的帐号,之后按下面的步骤来,点击settings 选择applications中新建app,即下面的create your own,这里上面的App是我得Demo 之后点击register注册你的应用 输入你App的名字后选择第二项,后面输入你的邮箱与面述,点击submit 这里请记好

iOS8中添加的extensions总结(四)——Action扩展

Action扩展 注:此教程来源于http://www.raywenderlich.com的<iOS8 by Tutorials> 1.准备 本次教程利用网站bitly.com进行 bitly网站进行对网络链接的精简化,比如将YouTube某个视频链接转化为bit.ly/1wOl2zf这种形式:同时,该网站提供对链接进行数据分析等服务,直接在链接后+“+”即可查看流量.点击量等信息,比如 bit.ly/1wOl2zf+ . 1.注册点击:https://bitly.com/a/sign_up 

asp.net core 3.0在Microsoft.Extensions.Logging中添加log4net支持

1. 引入log4net.Microsoft.Extensions.Logging.Log4Net.AspNetCore包 2. 添加log4net配置文件 3. 在Program中添加如下代码: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((context, logger) => { logger.ClearPr

iOS8 今日扩展

原文链接 : iOS 8: Creating a Today Widget 译者 : Harries Chen 校对者: Mr.Simple 状态 : 校对中 创建扩展是iOS8升级后的一个重要的特性,在本次介绍中,我将通过创建一个自定义的今日组件在通知中心来讲解.首先我们短暂的来了解一下有关扩展来明白组件这个重要的概念. 1.扩展是什么? 扩展是一个特殊的程序.但是它并不属于一个完整的APP,它需要有一个容器APP(containing app)来进行发布.容器可以是一个已经存在的APP,也可

系统定位在iOS8中的改变

CLLocationManager这个系统定位的类在iOS8之前要实现定位,只需要遵守CLLocationManagerDelegate这个代理即可: - (void)startLocate {     if([CLLocationManager locationServicesEnabled]){ _locManager = [[CLLocationManager alloc]init]; [self.locManager setDelegate:self]; [self.locManager

控制台应用程序中添加对MFC的支持

在windows控制台应用程序中,肯能会想使用一些MFC中的类,如CStringArray等,通过下面两步简单的设置可以添加对MFC的支持: 1.右击工程名 -> References 选择 All Configuration ->Configuration Properties ->General->Use of MFC ->Use MFC in a Shared DLL 2.在stdafx.h头文件中添加一下内容: #define _ATL_CSTRING_EXPLICI

iOS8中的定位服务

My app that worked fine in iOS 7 doesn't work with the iOS 8 SDK. CLLocationManager doesn't return a location, and I don't see my app under Settings > Location Services either. I did a Google search on the issue but nothing came up, what could be wro

初探 iOS8 中的 Size Class

以前和安卓的同学聊天的时候,谈到适配一直是一个非常开心的话题,看到他们被各种屏幕适配折磨的欲仙欲死,心里真替他们高兴.不过在做到 iPhone 和 iPad 的适配的时候,一个页面需要配置多个 xib 进行开发还是个很头疼的事情.再加上 iPhone6 和 iPhone6 plus 的发布,适配似乎也变得麻烦起来.今天了解了 iOS8 中的 Size Class 之后,真的笑,笑出声. 简介 先来看一下我们的新伙伴:Size Classes.在 iOS8 中,我们不用再像以前那样,一个页面新建多

iOS8-xcode6中添加pch全局引用文件

iOS8 [xcode6中添加pch全局引用文件] (2014-11-27 11:13:02) 前沿:xcode6中去掉了pch,为了一些琐碎的头文件引用,加快了 编译速度! xcode6之前的版本建项目就自动添加了是这样的: xcode6后的版本要自己手动的添加步骤如下: 1)  2) 3) $(SRCROOT)/pchFile.pch 这样就ok了! -----------------------------------------------------------------------