您的位置:首页 > 产品设计 > UI/UE

研究 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 ,就不同了,在两者之间建立了严格的界限,回避
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

UIActivityTypePrint
UIActivityTypeCopyToPasteboard
UIActivityTypeAssignToContact
UIActivityTypeSaveToCameraRoll
UIActivityTypeAddToReadingList
UIActivityTypeAirDrop

UIActivityCategoryShare

UIActivityTypeMessage
UIActivityTypeMail
UIActivityTypePostToFacebook
UIActivityTypePostToTwitter
UIActivityTypePostToFlickr
UIActivityTypePostToVimeo
UIActivityTypePostToTencentWeibo
UIActivityTypePostToWeibo

每个 Activity 类型都支持好多种不同的数据类型。例如,一条 Tweet 可能由 NSString 以及一个附加的图像 和/或 URL 所组成。

不同的
Activity 类型所支持的数据类型

Activity 类型字符串属性字符串URLData图像Asset其它
发布到 Facebook
发布到 Twitter
发布到 Weibo
信息✓*✓*✓*sms:// NSURL
邮件✓+✓+✓+
打印✓+✓+UIPrintPageRenderer, UIPrintFormatter, & UIPrintInfo
拷贝到剪贴板UIColor, NSDictionary
添加到联系人
保存到相机胶卷
添加到阅读列表
发布到 Flickr
发布到 Vimeo
发布到腾讯微博
AirDrop

<UIActivityItemSource>
& UIActivityProvider

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: