UIActivityViewController介绍
系统分享功能使用UIActivityViewController实现,此类能够实现把要分享的内容分享到社交媒体、短信、电子邮件等,分享的内容可以是文本、图片、链接、视频等。
初始化
UIActivityViewController(activityItems: <#T##[Any]#>, applicationActivities: <#T##[UIActivity]?#>)
UIActivityViewController的初始化需要传递两个参数,第一个参数activityItems是要分享的内容,该数组中的对象类型可以是任意的。
如下:
var activityItems = ["要分享的内容",UIImage.init(named: "要分享图片的名称")] as [Any]
UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
如果分享的内容是同一类型,可以不加 as [Any],否则的话,就得加上
第二个参数applicationActivities 表示应用程序支持的自定义服务的对象数组,一个我们一般写为nil。
如果我们需要自定义服务类型,就需要创建个CustomUIActicity,继承UIActivity
class CustomUIActicity: UIActivity {
}
同时需要复写如下方法
1. activityType
2. activityTitle
3. activityImage
4. canPerform(withActivityItems:)
5. prepare(withActivityItems:)
6. activityCategory
activityType是提供的服务类型的标识符,一般返回自定义的类名。 activityTitle、 activityImage 自定的服务的标题和LOGO。 canPerform(withActivityItems:) 对分享的内容做下预判断,看是否需要进行分享。 prepare(withActivityItems:)点击分享按钮后,对分享进行操作。 activityCategory分享的类型,分为share和action.
分享文字、图片、链接
先定义要分享的内容
let textShare = "分享的标题。"
let imageShare = #imageLiteral(resourceName: "icon_tab1_select")
let urlShare = URL(string: "http://www.baidu.com")
let activityItems = [textShare,imageShare,urlShare] as [Any]
按照上边的初始化流程,进行初始化
let toVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
present(toVC, animated: true, completion: nil)
分享视频
先定义个视频的URL
let videoUrl = URL(fileURLWithPath: Bundle.main.path(forResource: "test", ofType: "mp4") ?? "")
present一下
let activityVC = UIActivityViewController(activityItems: [videoUrl] , applicationActivities: nil)
present(toVC, animated: true, completion: nil)
分享自定义UIActivity
首选自定义个CustomUIActicity,并复写相关方法
class CustomUIActicity: UIActivity {
//分享的标题
override var activityTitle: String? {
return "一品大帅"
}
//分享的LOGO
override var activityImage: UIImage? {
return UIImage.init(named: "icon_tab1_select")
}
//提供的服务类型的标识符
override var activityType: UIActivityType? {
return UIActivityType.init(CustomUIActicity.self.description())
}
//分享类型
override class var activityCategory: UIActivityCategory {
return .action
}
///此处对要分享的内容做操作
override func prepare(withActivityItems activityItems: [Any]) {
activityDidFinish(true)
}
///此处预判断下,是否允许进行分享
override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
return true
}
}
创建要分享的内容
let toVC = UIActivityViewController(activityItems: ["分享的标题"], applicationActivities: [CustomUIActicity()])
present(toVC, animated: true, completion: nil)
UIActivityViewController的第二个参数 applicationActivities传入的是我们自定义的CustomUIActicity。
如果我们需要对分享结果做监听,采用如下写法
toVC.completionWithItemsHandler = {(_ activityType: UIActivityType?, _ completed: Bool, _ returnedItems: [Any]?, _ activityError: Error?) -> Void in
print(completed ? "成功" : "失败")
}