56- Swift 之 UIActivity 的使用和自定義

一 、 UIActivity 的介紹

????????????????一個抽象類的子類來實現(xiàn)App-Specific服務(wù)。這個類可以使用之前必須從它派生出子類。活動的工作對象是數(shù)據(jù)提供,并提供一些iOS的元信息可以顯示給用戶。對于更復(fù)雜的服務(wù),一個活動對象還可以顯示一個自定義用戶界面和使用它來從用戶收集更多的信息。

二、UIActivity 的使用要重寫的方法

  • activityType : Activity 的類型

  • activityTitle : Activity 按鈕下方顯示的文字

  • activityImage : Activity 的按鈕顯示圖像

  • canPerform(withActivityItems:) : Activity 是否允許顯示按鈕

  • prepare(withActivityItems:) :Activity 的事件執(zhí)行前調(diào)用函數(shù)

  • activityCategory : Activity 按鈕的類型( share / action)

  • activityViewController : 事件執(zhí)行完畢后的跳轉(zhuǎn)的控制器

  • perform() : 事件執(zhí)行中調(diào)用的函數(shù)

  • activityDidFinish : 事件在 activityViewController 無返回值的時候,調(diào)用改完成函數(shù)。

三 、 UIActivity 的參數(shù)和方法的介紹

func IntroduceActivity() -> Void {
    /**
     創(chuàng)建一個 UIActivity
     */
    let KActivity = UIActivity.init()
    // MARK: Activity 的Params
    
    // TODO: Activity 的按鈕類型
    /**
     UIActivityCategory 
     
     @params 
     
     action : 是按鈕類型
     share:  分享類型
     
     */
    let ActionType = UIActivity.activityCategory
    print(ActionType)
    
    // TODO : 分享類型
    let ActivityType = KActivity.activityType
    print(ActivityType!)
    
    
    // TODO : 分享的文字
    let ActivityTitle = KActivity.activityTitle
    print(ActivityTitle!)
    
    
    // TODO : 分享的圖像
    let ActivityImage = KActivity.activityImage
    print(ActivityImage!)
    

     // TODO: 是否顯示分享按鈕
    open func canPerform(withActivityItems activityItems: [Any]) -> Bool
     
     // TODO:解析分享數(shù)據(jù)時調(diào)用
     open func prepare(withActivityItems activityItems: [Any])
    
     // TODO: 分享成功調(diào)用
     open var activityViewController: UIViewController? { get }
     
     // TODO: 分享執(zhí)行時調(diào)用
     open func perform()
     
     // TODO: 分享執(zhí)行完畢時調(diào)用
     open func activityDidFinish(_ completed: Bool)

}

四 、 UIActivity 的子類創(chuàng)建實例

1> activityCategory 的類型是 Action 時

import UIKit

class NetworkMethodActivity: UIActivity {

    /**
     方法按鈕圖標
     */
    override var activityImage: UIImage? {
        return UIImage.init(named: "search")
    }
    
    /**
     按鈕下方的文字
     */
    override var activityTitle: String? {
        return "NetWork搜索"
    }
    
    /**
     類型
     */
    override var activityType: UIActivityType? {
        return UIActivityType.init("NetWork小賤")
    }
    
    /**
     按鈕的類型
     */
    override class var activityCategory: UIActivityCategory {
        return .action
    }
    
    
    /**
     判斷是否顯示事件按鈕
     */
    override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
        return true
    }
    
    /**
     事件執(zhí)行前調(diào)用的方法
     */
    override func prepare(withActivityItems activityItems: [Any]) {
        print("事件執(zhí)行前")
    }
    
    
    /**
     事件執(zhí)行中時調(diào)用
     */
    override func perform() {
        /**
         分享代碼
         
         分享到 WeChat / QQ / Sina / 人人 等
         */
        activityDidFinish(true)
    }
    

    /**
     事件完成后跳轉(zhuǎn)頁面
     */
    override var activityViewController: UIViewController? {
        return nil
    }
    
    /**
     事件完成
     */
    override func activityDidFinish(_ completed: Bool) {
        print("事件調(diào)用完成")
    }
}

2> activityCategory 的類型是 share 時

import UIKit

class NetworkActivity: UIActivity {
    /**
     UIActivity 我們不能直接使用,我都是用繼承UIActivity的子類。
     */
    
    /**
     模型參數(shù)
     */
    var wkText:String!
    var wkUrl:URL!
    var wkImage:UIImage!
    
    /**
     顯示分享框內(nèi)的名字
     */
    override var activityTitle: String?{
        return "NetWork分享"
    }
    
    /**
     顯示在分享框里面的圖片
     */
    override var activityImage: UIImage? {
        return (UIImage.init(named: "Image")?.withRenderingMode(.alwaysOriginal))
    }
    
    /**
     分享類型
     */
    override var activityType: UIActivityType? {
        return UIActivityType.init("NetWork小賤")
    }
    
    /**
     分享按鈕的類型
     */
    override class var activityCategory: UIActivityCategory {
        return .share
    }

    /**
     判斷是否顯示分享按鈕
     */
    override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
        for item in activityItems {
            if item is UIImage {
                return true
            }
            if item is String {
                return true
            }
            if item is URL {
                return true
            }
        }
        return false
    }
    
    
    /**
     準備發(fā)起分享
     */
    override func prepare(withActivityItems activityItems: [Any]) {
        print("發(fā)起分享")
    }
    
    /**
     分享執(zhí)行中時調(diào)用
     */
    override func perform() {
        /**
         分享代碼
         
         分享到 WeChat / QQ / Sina / 人人 等
         */
        activityDidFinish(true)
    }
    
    /**
     分享時調(diào)用
     */
    override var activityViewController: UIViewController? {
        
        return nil
    }
    
    /**
     分享結(jié)束調(diào)用
     
     注意:如果activityViewController 有返回值時,則 perform() 將不再調(diào)用
     */
    override func activityDidFinish(_ completed: Bool) {
         print("NetWork--分享成功")
    }

}

3> UIActivity 的調(diào)用實例

func activityStart() {
    /**
     按鈕
     */
    let shareBtn = UIButton.init(type: .custom)
    shareBtn.frame = CGRect.init(x: 20, y: 80, width: self.view.frame.width-40, height: 40)
    shareBtn.setTitle("Activity 的自定義", for: .normal)
    shareBtn.backgroundColor = UIColor.cyan
    shareBtn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
    self.view.addSubview(shareBtn)
}

func btnClick() -> Void {
    /**
     傳入分想的數(shù)據(jù)
     */
    let items:[Any] = ["NetWork小賤",UIImage.init(named: "Image")!,URL.init(string: "https://www.baidu.com")!]
    
    /**
     分享的按鈕組件
     */
    let activities = [NetworkActivity(),NetworkMethodActivity()]
    
    /**
     分享的控件
     */
    let ActivityVc = UIActivityViewController.init(activityItems: items, applicationActivities: activities)
    
    /**
     排除其他按鈕顯示在分享框里面
     */
    ActivityVc.excludedActivityTypes = [.mail,.copyToPasteboard,.print,.assignToContact,.saveToCameraRoll,.addToReadingList]
    

    /**
     顯示分享視圖
     */
    self.present(ActivityVc, animated: true, completion: nil)
    
}

效果展示如下:

Untitled.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容