研究 UIActivityViewController

原文地址:https://github.com/nixzhu/dev-blog/blob/master/2014-04-22-ui-activity-viewcontroller.md


数据与代码的关系一直都让人好奇。

特定的编程语言,如 LisploMathematica 都是同像性的(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

默认情况下,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值