系統分享功能使用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/...