资讯专栏INFORMATION COLUMN

Swift 系统分享视频(UIActivityViewController)

HollisChuang / 2195人阅读

摘要:介绍系统分享功能使用实现,此类能够实现把要分享的内容分享到社交媒体短信电子邮件等,分享的内容可以是文本图片链接视频等。初始化的初始化需要传递两个参数,第一个参数是要分享的内容,该数组中的对象类型可以是任意的。点击分享按钮后,对分享进行操作。

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/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17015.html

相关文章

  • iOS原生分享UIActivityViewController

    摘要:移动开发时常常会遇到分享的需求,内建的就是一个不错的方式基本知识的构造方法如下这个参数是一个类型数组,其内容是你希望分享的任意内容,可以是或其他遵循的类这个参数表示了此应用自身能处理的分享类型,这里可以声明应用是否可以处理自身的分享这里我们 移动App开发时常常会遇到分享的需求,iOS内建的UIActivityViewController就是一个不错的方式 UIActivityView...

    willin 评论0 收藏0
  • 使用Quick Look框架对文件进行预览

    摘要:上面的方法将会成为一个非常有用的工具,因为该函数实现了两个目的在中我们将会展示单一的文件名第一个返回值。我们会使用第二个返回值对应的文件类型来创建一个简短的文件描述。 作者:GABRIEL THEODOROPOULOS,时间:2016/4/12翻译:BigNerdCoding, 如有错误欢迎指出。原文链接 在iOS SDK中你能找到一些不知名但是却非常有用的框架。其中的大多数都能给开发...

    philadelphia 评论0 收藏0
  • fir.im Weekly - 30 天从 0 开始学 Swift

    摘要:本文总结了微信在适配上遇到的问题和解决方案。由微信移动客户端开发团队官方账号发出,全文阅读看这里被误解的和被神化的唐巧大神在这篇文章里讲述了正确掌握使用的姿势,深入剖析了和,中间提到了开发中的一些最佳实践。 最近一周看到很多很好用的的轮子,忍不住推荐给大家。此外,本期 fir.im Weekly 还精选了一些实用的 iOS , Android , UI 动画的干货文章。让我们一起来看下...

    econi 评论0 收藏0
  • iOS 学习资料整理(上)

    摘要:看到一份很赞的学习资料,由于文章字数限制,分两篇分享原文学习资料整理这份学习资料是为初学者所准备的旨在帮助初学者们快速找到适合自己的学习资料节省他们搜索资料的时间使他们更好的规划好自己的学习路线更快的入门更准确的定位的目前所处的位置该文档会 看到一份很赞的IOS学习资料,由于SF文章字数限制,分两篇分享 原文 iOS 学习资料整理 这份学习资料是为 iOS 初学者所准备的, 旨在帮助...

    church 评论0 收藏0
  • [译] iOS 开发,该如何解决弹窗的设计问题?

    摘要:一般,会在常规宽度下展示为弹窗,在紧凑宽度下变成一个透明的表。用同样不访问的技巧导致抛出一个异常说必须为这个弹窗提供位置信息。不会在操作列表的异常警告上展现一个弹窗。如果你知道解决这个问题的方法,麻烦在我的留言。 原文链接: Preventing Popovers on Popovers原文作者: Douglas Hill译文出自: 掘金翻译计划译者: llp0574校对者: yif...

    XGBCCC 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<