(本文代码已升级至Swift5)
UIActivity 可以十分方便地将文字、图片等内容进行分享,比如分享到微信、微博、发送邮件、短信等等。我们不仅可以分享内容出来,也可以在自己的 App 里添加自己的分享按钮或隐藏已有的分享按钮来实现定制的功能。
下面通过继承 UIActivity 实现定制按钮和功能,通过调用 UIActivityViewController 来展示分享框。
注意:UIActivityView 面板有上下两行,上面一行是分享按钮(为彩色)。下面一行是动作按钮(图片自动变为黑白)。
下面我们分别在上下各添加一个自定义的功能按钮(“微信”“小驴”)作为演示。
效果图:
自定义UIActivity分享
代码如下:
ViewController
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func showShareView(_ sender: Any) {
//准备分享内容,文本图片链接
let items:[Any] = ["小驴拉磨", UIImage(named:"IQH_mine_systemSetting")!,
URL(fileURLWithPath:"//www.greatytc.com/u/adedbfe99f1c")]
//新建自定义的分享对象数组
let acts = [WeixinActivity(),DonkeyActivity()]
//根据分享内容和自定义的分享按钮调用分享视图
let actView:UIActivityViewController =
UIActivityViewController(activityItems: items, applicationActivities: acts)
//要排除的分享按钮,不显示在分享框里
actView.excludedActivityTypes = [.mail,.copyToPasteboard,.print,
.assignToContact,.saveToCameraRoll]
//显示分享视图
self.present(actView, animated:true, completion:nil)
}
}
DonkeyActivity
import UIKit
class DonkeyActivity: UIActivity
{
//用于保存传递过来的要分享的数据
var text:String!
var url:URL!
var image:UIImage!
override var activityTitle: String? {
return "小驴拉磨"
}
//分享框的图片
override var activityImage: UIImage? {
return UIImage(named:"donkey")
}
//分享类型,在UIActivityViewController.completionHandler回调里可以用于判断,一般取当前类名
override var activityType: UIActivity.ActivityType? {
return UIActivity.ActivityType(rawValue: DonkeyActivity.self.description())
}
//按钮类型(分享按钮:在第一行,彩色,动作按钮:在第二行,黑白)
override class var activityCategory: UIActivity.Category {
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("prepareWithActivityItems:donkey")
for item in activityItems {
if item is UIImage {
image = item as? UIImage
}
if item is String {
text = item as? String
}
if item is URL {
url = item as? URL
}
}
}
//执行分享行为
//这里根据自己的应用做相应的处理
//例如你可以分享到另外的app例如微信分享,也可以保存数据到照片或其他地方,甚至分享到网络
override func perform() {
print("performActivity:donkey")
//具体的执行代码这边先省略
//......
activityDidFinish(true)
}
//分享时调用
override var activityViewController: UIViewController? {
print("activityViewController:donkey")
return nil
}
//完成分享后调用
override func activityDidFinish(_ completed: Bool) {
print("activitydidfinish:donkey")
}
}
WeixinActivity
import UIKit
class WeixinActivity: UIActivity {
//用于保存传递过来的要分享的数据
var text:String!
var url:URL!
var image:UIImage!
override var activityTitle: String? {
return "微信"
}
//分享框的图片
override var activityImage: UIImage? {
return UIImage(named:"IQH_mine_systemSetting")
}
//分享类型,在UIActivityViewController.completionHandler回调里可以用于判断,一般取当前类名
override var activityType: UIActivity.ActivityType? {
return UIActivity.ActivityType(rawValue: DonkeyActivity.self.description())
}
//按钮类型(分享按钮:在第一行,彩色,动作按钮:在第二行,黑白)
override class var activityCategory: UIActivity.Category {
return .action
}
//是否显示分享按钮,这里一般根据用户是否授权,或分享内容是否正确等来决定是否要隐藏分享按钮
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("prepareWithActivityItems:微信")
for item in activityItems {
if item is UIImage {
image = item as? UIImage
}
if item is String {
text = item as? String
}
if item is URL {
url = item as? URL
}
}
}
//执行分享行为
//这里根据自己的应用做相应的处理
//例如你可以分享到另外的app例如微信分享,也可以保存数据到照片或其他地方,甚至分享到网络
override func perform() {
print("performActivity:微信")
//具体的执行代码这边先省略
//......
activityDidFinish(true)
}
//分享时调用
override var activityViewController: UIViewController? {
print("activityViewController:微信")
return nil
}
//完成分享后调用
override func activityDidFinish(_ completed: Bool) {
print("activitydidfinish:微信")
}
}
image.png
分享QQ
原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_641.html