美文网首页花落√莫相思OC-开发案例收集
56- Swift 之 UIActivity 的使用和自定义

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

作者: NetWork小贱 | 来源:发表于2017-08-02 14:57 被阅读30次

    一 、 UIActivity 的介绍

                    一个抽象类的子类来实现App-Specific服务。这个类可以使用之前必须从它派生出子类。活动的工作对象是数据提供,并提供一些iOS的元信息可以显示给用户。对于更复杂的服务,一个活动对象还可以显示一个自定义用户界面和使用它来从用户收集更多的信息。

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

    • activityType : Activity 的类型

    • activityTitle : Activity 按钮下方显示的文字

    • activityImage : Activity 的按钮显示图像

    • canPerform(withActivityItems:) : Activity 是否允许显示按钮

    • prepare(withActivityItems:) :Activity 的事件执行前调用函数

    • activityCategory : Activity 按钮的类型( share / action)

    • activityViewController : 事件执行完毕后的跳转的控制器

    • perform() : 事件执行中调用的函数

    • activityDidFinish : 事件在 activityViewController 无返回值的时候,调用改完成函数。

    三 、 UIActivity 的参数和方法的介绍

    func IntroduceActivity() -> Void {
        /**
         创建一个 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:解析分享数据时调用
         open func prepare(withActivityItems activityItems: [Any])
        
         // TODO: 分享成功调用
         open var activityViewController: UIViewController? { get }
         
         // TODO: 分享执行时调用
         open func perform()
         
         // TODO: 分享执行完毕时调用
         open func activityDidFinish(_ completed: Bool)
    
    }
    

    四 、 UIActivity 的子类创建实例

    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
        }
        
        /**
         事件执行前调用的方法
         */
        override func prepare(withActivityItems activityItems: [Any]) {
            print("事件执行前")
        }
        
        
        /**
         事件执行中时调用
         */
        override func perform() {
            /**
             分享代码
             
             分享到 WeChat / QQ / Sina / 人人 等
             */
            activityDidFinish(true)
        }
        
    
        /**
         事件完成后跳转页面
         */
        override var activityViewController: UIViewController? {
            return nil
        }
        
        /**
         事件完成
         */
        override func activityDidFinish(_ completed: Bool) {
            print("事件调用完成")
        }
    }
    

    2> activityCategory 的类型是 share 时

    import UIKit
    
    class NetworkActivity: UIActivity {
        /**
         UIActivity 我们不能直接使用,我都是用继承UIActivity的子类。
         */
        
        /**
         模型参数
         */
        var wkText:String!
        var wkUrl:URL!
        var wkImage:UIImage!
        
        /**
         显示分享框内的名字
         */
        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
        }
        
        
        /**
         准备发起分享
         */
        override func prepare(withActivityItems activityItems: [Any]) {
            print("发起分享")
        }
        
        /**
         分享执行中时调用
         */
        override func perform() {
            /**
             分享代码
             
             分享到 WeChat / QQ / Sina / 人人 等
             */
            activityDidFinish(true)
        }
        
        /**
         分享时调用
         */
        override var activityViewController: UIViewController? {
            
            return nil
        }
        
        /**
         分享结束调用
         
         注意:如果activityViewController 有返回值时,则 perform() 将不再调用
         */
        override func activityDidFinish(_ completed: Bool) {
             print("NetWork--分享成功")
        }
    
    }
    
    

    3> UIActivity 的调用实例

    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 {
        /**
         传入分想的数据
         */
        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

    相关文章

      网友评论

        本文标题:56- Swift 之 UIActivity 的使用和自定义

        本文链接:https://www.haomeiwen.com/subject/fygelxtx.html