欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS9 系统分享调用之UIActivityViewController

程序员文章站 2022-05-16 11:34:57
uiactivityviewcontroller类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务。 系统提供...

uiactivityviewcontroller类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务。

系统提供了一些通用的标准服务,例如拷贝内容至粘贴板、发布一个公告至社交网、通过email或者sms发送内容。

应用程序同样可以自定义服务。(我的微信分享就属于自定义服务, 之后将会写一篇教程介绍)

你的应用程序负责配置、展现和解雇这个view controller。

viewcontroller的配置涉及到viewcontroller需要用到的具体的数据对象。(也可以指定自定义服务列表,让应用程序支持这些服务)。

在展现view controller时,必须根据当前的设备类型,使用适当的方法。在ipad上,必须通过popover来展现view controller。在iphone和ipodtouch上,必须以模态的方式展现。

昨天有网友说我写的那段系统分享代码在ios9上有warning,看下了原来ios8之后uipopovercontroller被废弃了。新增加的uipopoverpresentationcontroller在控制popview上更简单好用。

iOS9 系统分享调用之UIActivityViewController

下面是我修改之后的代码:

1. 在app内以子视图方式打开其他app预览,仅支持6.0以上

openappwithidentifier(appid: string)

2. 分享文字图片信息,ipad上会以sourceview为焦点弹出选择视图

share(texttoshare: string, url: string, image: uiimage, sourceview: uiview)
/// 在app内以子视图方式打开其他app预览,仅支持6.0以上
 private func openappwithidentifier(appid: string) {
 if let _ = nsclassfromstring("skstoreproductviewcontroller") {
  let storeproductviewcontroller = skstoreproductviewcontroller()
  storeproductviewcontroller.delegate = self
  let dict = nsdictionary(object:appid, forkey:skstoreproductparameteritunesitemidentifier) as! [string : anyobject]
  storeproductviewcontroller.loadproductwithparameters(dict, completionblock: { (result, error) -> void in
//  self.presentviewcontroller(storeproductviewcontroller, animated: true, completion: nil)
  })
  self.presentviewcontroller(storeproductviewcontroller, animated: true, completion: nil)
 }else {
  uiapplication.sharedapplication().openurl(nsurl(string: "itms-apps://itunes.apple.com/app/id\(appid)")!)
 }
 }
 /// 分享文字图片信息,ipad上会以sourceview为焦点弹出选择视图
 private func share(texttoshare: string, url: string, image: uiimage, sourceview: uiview) {
 let objectstoshare = [texttoshare, url, image]
 let activityviewcontroller = uiactivityviewcontroller(activityitems: objectstoshare, applicationactivities: nil)
 if uidevice.currentdevice().userinterfaceidiom == uiuserinterfaceidiom.phone {
  self.presentviewcontroller(activityviewcontroller, animated: true, completion: nil)
 }else {
  let popover = activityviewcontroller.popoverpresentationcontroller
  if (popover != nil){
  popover?.sourceview = sourceview
  popover?.sourcerect = sourceview.frame
  popover?.permittedarrowdirections = uipopoverarrowdirection.any
  self.presentviewcontroller(activityviewcontroller, animated: true, completion: nil)
  }
 }
 }