研究 UIActivityViewController
2014-05-10 10:28
288 查看
原文地址:https://github.com/nixzhu/dev-blog/blob/master/2014-04-22-ui-activity-viewcontroller.md
数据与代码的关系一直都让人好奇。
特定的编程语言,如
Lisp、lo 和
Mathematica 都是同像性的(homoiconic),意味着它们的代码可作为数据原语呈现,也就是说它们自身就可在代码中被操纵。许多其他语言,包括 Objective-C ,就不同了,在两者之间建立了严格的界限,回避
当问题中的数据过大或难以表示为除了字节流之外的任何东西时,那么代码与数据的这种紧张关系就达到了一个新的高度。关于“如何编码、解码以及解释图像、文档和媒体的二进制表示”的问题从最开始的操作系统开始就一直存在着。
OS X 的
Ruby 源代码文件(.rb)被分类为 Ruby 源代码 > 源代码 > 文本 > 内容 > 数据;一个 QuickTime 电影文件(.mov)被分类为视频 > 电影 > 试听内容 > 内容 > 数据;
在桌面文件系统抽象里,UTI工作得相当好。然而,在一个移动范式里,文件和目录对于用户来说都被隐藏了,于是这很快就失效了。而且,更重要的是,云服务和社交媒体的兴起已经让远程实体比本地文件具有更重要的地位。因此,UTI和URL之间出现了紧张关系。
很明显我们需要其它的某种东西。那 UIActivityViewController 能成为我们拼命追求的解决办法吗?
UIActivityViewController ,出现于 iOS 6,在应用里为分享和操作数据提供了一个统一的服务接口。
给出一个可操作数据的集合,那一个 UIActivityViewController 实例就可如下创建:
这将在屏幕的底部呈现如下所示的东西:
默认情况下,UIActivityViewController 将显示所有可用于所提供内容的服务,但我们也可以排除特定的 Activity 类型。
Activity 类型又分为“操作”和“分享”两大类:
UIActivityTypeCopyToPasteboard
UIActivityTypeAssignToContact
UIActivityTypeSaveToCameraRoll
UIActivityTypeAddToReadingList
UIActivityTypeAirDrop
UIActivityTypeMail
UIActivityTypePostToFacebook
UIActivityTypePostToTwitter
UIActivityTypePostToFlickr
UIActivityTypePostToVimeo
UIActivityTypePostToTencentWeibo
UIActivityTypePostToWeibo
每个 Activity 类型都支持好多种不同的数据类型。例如,一条 Tweet 可能由 NSString 以及一个附加的图像 和/或 URL 所组成。
不同的
<UIActivityItemSource>
数据与代码的关系一直都让人好奇。
特定的编程语言,如
Lisp、lo 和
Mathematica 都是同像性的(homoiconic),意味着它们的代码可作为数据原语呈现,也就是说它们自身就可在代码中被操纵。许多其他语言,包括 Objective-C ,就不同了,在两者之间建立了严格的界限,回避
eval()和其它潜在的危险的动态指示加载方法。
当问题中的数据过大或难以表示为除了字节流之外的任何东西时,那么代码与数据的这种紧张关系就达到了一个新的高度。关于“如何编码、解码以及解释图像、文档和媒体的二进制表示”的问题从最开始的操作系统开始就一直存在着。
OS X 的
Core Services 框架与 iOS 的
移动 Core Services 框架都提供函数通过通用类型标识符(Universal Type Identifiers,即UTI)来根据文件扩展和MIME类型识别和分类数据类型。UTI提供了可扩展和可继承的分类系统,它能给予开发人员极大的灵活性,即使是处理最奇特的文件类型。例如,一个
Ruby 源代码文件(.rb)被分类为 Ruby 源代码 > 源代码 > 文本 > 内容 > 数据;一个 QuickTime 电影文件(.mov)被分类为视频 > 电影 > 试听内容 > 内容 > 数据;
在桌面文件系统抽象里,UTI工作得相当好。然而,在一个移动范式里,文件和目录对于用户来说都被隐藏了,于是这很快就失效了。而且,更重要的是,云服务和社交媒体的兴起已经让远程实体比本地文件具有更重要的地位。因此,UTI和URL之间出现了紧张关系。
很明显我们需要其它的某种东西。那 UIActivityViewController 能成为我们拼命追求的解决办法吗?
UIActivityViewController ,出现于 iOS 6,在应用里为分享和操作数据提供了一个统一的服务接口。
给出一个可操作数据的集合,那一个 UIActivityViewController 实例就可如下创建:
NSString *string = ...; NSURL *URL = ...; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[string, URL] applicationActivities:nil]; [navigationController presentViewController:activityViewController animated:YES completion:^{ // ... }];
这将在屏幕的底部呈现如下所示的东西:
默认情况下,UIActivityViewController 将显示所有可用于所提供内容的服务,但我们也可以排除特定的 Activity 类型。
activityViewController.excludedActivityTypes = @[UIActivityTypePostToFacebook];
Activity 类型又分为“操作”和“分享”两大类:
UIActivityCategoryAction
UIActivityTypePrintUIActivityTypeCopyToPasteboard
UIActivityTypeAssignToContact
UIActivityTypeSaveToCameraRoll
UIActivityTypeAddToReadingList
UIActivityTypeAirDrop
UIActivityCategoryShare
UIActivityTypeMessageUIActivityTypeMail
UIActivityTypePostToFacebook
UIActivityTypePostToTwitter
UIActivityTypePostToFlickr
UIActivityTypePostToVimeo
UIActivityTypePostToTencentWeibo
UIActivityTypePostToWeibo
每个 Activity 类型都支持好多种不同的数据类型。例如,一条 Tweet 可能由 NSString 以及一个附加的图像 和/或 URL 所组成。
不同的
Activity 类型所支持的数据类型
Activity 类型 | 字符串 | 属性字符串 | URL | Data | 图像 | Asset | 其它 |
---|---|---|---|---|---|---|---|
发布到 Facebook | ✓ | ✓ | ✓ | ✓ | |||
发布到 Twitter | ✓ | ✓ | ✓ | ✓ | |||
发布到 Weibo | ✓ | ✓ | ✓ | ✓ | ✓ | ||
信息 | ✓ | ✓ | ✓* | ✓* | ✓* | sms:// NSURL | |
邮件 | ✓+ | ✓+ | ✓+ | ||||
打印 | ✓+ | ✓+ | UIPrintPageRenderer, UIPrintFormatter, & UIPrintInfo | ||||
拷贝到剪贴板 | ✓ | ✓ | ✓ | UIColor, NSDictionary | |||
添加到联系人 | ✓ | ||||||
保存到相机胶卷 | ✓ | ✓ | |||||
添加到阅读列表 | ✓ | ||||||
发布到 Flickr | ✓ | ✓ | ✓ | ✓ | |||
发布到 Vimeo | ✓ | ✓ | ✓ | ||||
发布到腾讯微博 | ✓ | ✓ | ✓ | ✓ | ✓ | ||
AirDrop | ✓ | ✓ | ✓ | ✓ | ✓ |
<UIActivityItemSource>
& UIActivityProvider
相关文章推荐
- 如何取的select的value
- 富文本编辑器-ueditor基本配置
- form的text设置默认值
- [iOS]异步加载UIImageView----AsyImageView
- Distinct Subsequences
- 黄聪:WordPress 多站点建站教程(六):使用WP_Query、switch_to_blog函数实现获取子站点分类中的文章
- jsp中遇到Integer的方法valueOf()和parseInt()的区别.前者要求是对象类型,后者是数字型字符串
- 转型中 UE4 + Blender 自学随记 01
- Andriod Handler更新UI
- ios开发,将子线程获取的数据实时更新到UI
- 1Z0-051 QUESTION 17 NULL的运算
- Jquer获取页面控件的值 select,checkbox,radio
- BlueZ移植——ARM9
- 1Z0-051 QUESTION 16 Q操作符的使用
- 1Z0-051 QUETION 15 别名的用法
- Toj 2315 Brackets sequence
- Louis Vuitton Online Shop years by thousands
- php中使用include 或者require
- 【UEditor】远程上传图片到【七牛云存储】
- iOS中声音采集与播放的实现(使用AudioQueue)