• Swift


    UIActivity可以十分方便地将文字、图片等内容进行分享,比如分享到微信、微博、发送邮件、短信等等。我们不仅可以分享内容出来,也可以在自己的App里添加自己的分享按钮或隐藏已有的分享按钮来实现定制的功能。

    下面通过继承UIActivity实现定制按钮和功能,通过调用UIActivityViewController来展示分享框。
     
    注意:UIActivityView面板有上下两行,上面一行是分享按钮(为彩色)。下面一行是动作按钮(图片自动变为黑白)。
    下面我们分别在上下各添加一个自定义的功能按钮(“微信”“航歌”)作为演示。

    效果图如下:
        

    --- ViewController.swift ---
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import UIKit
     
    class ViewController: UIViewController {
         
        override func viewDidLoad() {
            super.viewDidLoad()
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
         
        //点击按钮弹出分享框
        @IBAction func btnClicked(sender: AnyObject) {
            //准备分享内容,文本图片链接
            let items = ["航歌", UIImage(named:"toSendImage.png")!,
                NSURL(fileURLWithPath:"http://hangge.com")!]
            //新建自定义的分享对象数组
            let acts = [WeiXinActivity(),HanggeActivity()]
            //根据分享内容和自定义的分享按钮调用分享视图
            var actView:UIActivityViewController =
            UIActivityViewController(activityItems: items, applicationActivities: acts)       
            //要排除的分享按钮,不显示在分享框里
            actView.excludedActivityTypes = [UIActivityTypeMail,UIActivityTypeCopyToPasteboard,
                UIActivityTypePrint,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]
            //显示分享视图
            self.presentViewController(actView, animated:true, completion:nil)
        }
    }
    --- HanggeActivity.swift ---
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import UIKit
     
    class HanggeActivity : UIActivity {
        //用于保存传递过来的要分享的数据
        var text:String!
        var url:NSURL!
        var image:UIImage!
         
        //显示在分享框里的名称
        override func activityTitle() -> String? {
            return "航歌"
        }
         
        //分享框的图片
        override func activityImage() -> UIImage? {
            return UIImage(named:"swift.png")
        }
         
        //分享类型,在UIActivityViewController.completionHandler回调里可以用于判断,一般取当前类名
        override func activityType() -> String? {
            return HanggeActivity.self.description()
        }
         
        //按钮类型(分享按钮:在第一行,彩色,动作按钮:在第二行,黑白)
        override class func activityCategory() -> UIActivityCategory{
            return UIActivityCategory.Action
        }
         
        //是否显示分享按钮,这里一般根据用户是否授权,或分享内容是否正确等来决定是否要隐藏分享按钮
        override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
            for item in activityItems {
                if item is UIImage {
                    return true
                }
                if item is String {
                    return true
                }
                if item is NSURL {
                    return true
                }
            }
            return false
        }
         
        //解析分享数据时调用,可以进行一定的处理
        override func prepareWithActivityItems(activityItems: [AnyObject]) {
            println("prepareWithActivityItems")
            for item in activityItems {
                if item is UIImage {
                    image = item as! UIImage
                }
                if item is String {
                    text = item as! String
                }
                if item is NSURL {
                    url = item as! NSURL
                }
            }
        }
         
        //执行分享行为
        //这里根据自己的应用做相应的处理
        //例如你可以分享到另外的app例如微信分享,也可以保存数据到照片或其他地方,甚至分享到网络
        override func performActivity() {
            println("performActivity")
            //具体的执行代码这边先省略
        }
         
        //分享时调用
        override func activityViewController() -> UIViewController? {
            println("activityViewController")
            return nil
        }
         
        //完成分享后调用
        override func activityDidFinish(completed: Bool) {
            println("activitydidfinish")
        }
    }
    --- WeiXinActivity.swift ---
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import UIKit
     
    class WeiXinActivity : UIActivity {
        //用于保存传递过来的要分享的数据
        var text:String!
        var url:NSURL!
        var image:UIImage!
         
        //显示在分享框里的名称
        override func activityTitle() -> String? {
            return "微信"
        }
         
        //分享框的图片
        override func activityImage() -> UIImage? {
            return UIImage(named:"wechat_session")
        }
         
        //分享类型,在UIActivityViewController.completionHandler回调里可以用于判断,一般取当前类名
        override func activityType() -> String? {
            return WeiXinActivity.self.description()
        }
         
        //按钮类型(分享按钮:在第一行,彩色,动作按钮:在第二行,黑白)
        override class func activityCategory() -> UIActivityCategory{
            return UIActivityCategory.Share
        }
         
        //是否显示分享按钮,这里一般根据用户是否授权,或分享内容是否正确等来决定是否要隐藏分享按钮
        override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
            for item in activityItems {
                if item is UIImage {
                    return true
                }
                if item is String {
                    return true
                }
                if item is NSURL {
                    return true
                }
            }
            return false
        }
         
        //解析分享数据时调用,可以进行一定的处理
        override func prepareWithActivityItems(activityItems: [AnyObject]) {
            println("prepareWithActivityItems")
            for item in activityItems {
                if item is UIImage {
                    image = item as! UIImage
                }
                if item is String {
                    text = item as! String
                }
                if item is NSURL {
                    url = item as! NSURL
                }
            }
        }
         
        //执行分享行为
        //这里根据自己的应用做相应的处理
        //例如你可以分享到另外的app例如微信分享,也可以保存数据到照片或其他地方,甚至分享到网络
        override func performActivity() {
            println("performActivity")
            //具体的执行代码这边先省略
        }
         
        //分享时调用
        override func activityViewController() -> UIViewController? {
            println("activityViewController")
            return nil
        }
         
        //完成分享后调用
        override func activityDidFinish(completed: Bool) {
            println("activitydidfinish")
        }
    }
  • 相关阅读:
    delete 用法总结
    js数组去重的常用方法总结
    学习中 常用到的string内置对象方法的总结
    Array 对象常用的方法总结
    javascript中运算符有哪些? 他们的优先级 呢?
    那些年前端经典面试题
    HHVM 3.0 发布,执行 PHP 的虚拟机
    【问底】徐汉彬:PHP7和HHVM的性能之争 (真是学到了很多)
    mysql 简单sql语句
    【问底】王帅:深入PHP内核(一)——弱类型变量原理探究
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4838334.html
Copyright © 2020-2023  润新知