Swift 系統分享視頻(UIActivityViewController)

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是提供的服務類型的標識符,一般返回自定義的類名。activityTitleactivityImage 自定的服務的標題和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 ? "成功" : "失敗")
        }
GIt地址:https://github.com/LSnumber1/...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章