系统分享功能使用UIActivityViewController实现,此类可以实现把要分享的内容分享到社交媒体、短信、电子邮件等,分享的内容能够是文本、图片、连接、视频等。git
UIActivityViewController(activityItems: <#T##[Any]#>, applicationActivities: <#T##[UIActivity]?#>)
UIActivityViewController的初始化须要传递两个参数,第一个参数activityItems是要分享的内容,该数组中的对象类型能够是任意的。
以下:github
var activityItems = ["要分享的内容",UIImage.init(named: "要分享图片的名称")] as [Any] UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
若是分享的内容是同一类型,能够不加 as [Any],不然的话,就得加上
第二个参数applicationActivities 表示应用程序支持的自定义服务的对象数组,一个咱们通常写为nil。
若是咱们须要自定义服务类型,就须要建立个CustomUIActicity,继承UIActivity数组
class CustomUIActicity: UIActivity { }
同时须要复写以下方法app
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.
先定义要分享的内容ide
let textShare = "分享的标题。" let imageShare = #imageLiteral(resourceName: "icon_tab1_select") let urlShare = URL(string: "http://www.baidu.com") let activityItems = [textShare,imageShare,urlShare] as [Any]
按照上边的初始化流程,进行初始化url
let toVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil) present(toVC, animated: true, completion: nil)
先定义个视频的URLspa
let videoUrl = URL(fileURLWithPath: Bundle.main.path(forResource: "test", ofType: "mp4") ?? "")
present一下code
let activityVC = UIActivityViewController(activityItems: [videoUrl] , applicationActivities: nil) present(toVC, animated: true, completion: nil)
首选自定义个CustomUIActicity,并复写相关方法orm
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 ? "成功" : "失败") }
GIt地址: https://github.com/LSnumber1/...