我希望能够使用 UIActivityViewController 同时 AirDrop 文本文件和图像。下面的代码可以很好地通过 iMessage 或电子邮件发送两种文件类型,但当我尝试使用 AirDrop 时,它会失败。该代码适用于 AirDropping 2 个图像或 2 个文本文件,但不适用于其中每一个。
@IBAction func shareImage(_ sender: UIButton)
{
// can't seem to AirDrop a mixture of file types. ie. can send 2 images, or 2 data files, but not an image and a data file
let fileToSend: NSURL = NSURL(fileURLWithPath: dataFile!)
let image = imageView.image!
let objectsToShare = [fileToSend, image] as [Any]
let controller = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
controller.excludedActivityTypes = [UIActivityType.postToFacebook, UIActivityType.postToTwitter, UIActivityType.postToWeibo, UIActivityType.print, UIActivityType.copyToPasteboard, UIActivityType.assignToContact, UIActivityType.saveToCameraRoll, …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码来呈现 UIActivityViewController。
var a = standard.value(forKey: "first_name") as? String
let text = a! + " text to share"
let url : NSURL = NSURL(fileURLWithPath: "https://itunes.apple.com/in/app/")
let textToShare = [ text as String , url as URL ] as [Any]
let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
activityViewController.completionWithItemsHandler = {
(s, ok, items, error) in
if ok == true {
DispatchQueue.main.async {
// code after completion
}
}
}
self.present(activityViewController, animated: true, …Run Code Online (Sandbox Code Playgroud) \n\n\n问题
\n\n必须对下面的代码进行哪些更改才能确保 Messenger 能够很好地处理
\nUIActivityViewController并共享图像和文本,或者至少共享图像?
背景
\n\n我用来UIActivityViewController分享我的应用程序中的文本和图像,并将它们发送到电子邮件、消息和其他共享应用程序。UIActivityViewController很棒,并且可以以简单且标准的方式与大多数应用程序\xe2\x80\xa6 配合使用,但是,我\xe2\x80\x99m 与 Messenger (Facebook Messenger) 存在问题,它不想\xe2\x80\x99 合作。
在下面的代码中,我点击 aUIButton来拍摄屏幕的快照图像,将其转换为 .png,然后将准备好的图像 ( imageShare) 连同我准备的文本 ( textShare) 一起发送到UIActivityViewController. 这个简单的方法允许我的应用程序成功共享到电子邮件、消息和除 Messenger 之外的许多其他共享应用程序。
(旁注,Facebook 只能分享准备好的图像 ( imageShare),但不能分享文本。)
问题
\n\nUIActivityViewController这些是尝试与 Messenger共享时出现的问题:
分享时activityItems: [textShare, imageShare]
分享时activityItems: [textShare]
UIActivityViewController.optimization ios uiactivityviewcontroller facebook-messenger swift
我正在尝试使用共享我的应用程序UIActivityViewController,但无法重现与从 App Store 共享应用程序时相同的效果,这意味着:
当我单击 App Store 中的共享按钮时,我看到如下所示的内容:
但是当我尝试分享我的应用程序时,我有这个:
我使用的代码是:
if let logo = UIImage(named: "myLogo"), let websiteURL = URL(string: "https://itunes.apple.com/app/idxxxxxxxxxx") {
let objectsToShare = ["My App Name", websiteURL, logo] as [Any]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [])
if let popoverController = activityVC.popoverPresentationController {
popoverController.sourceView = self.view
popoverController.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
}
present(activityVC, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
该if let popoverController = ...循环是为了防止使用 iPad 时发生崩溃。
我需要改变什么才能达到App Store的效果?(要有带有标题和副标题的图像)
此外,一旦我与例如共享应用程序Messages,这就是区别:
我怎样才能达到同样的效果?(带有标题和副标题的单个图像,作为奖励,一个视频)。我不确定这是否是 iOS 13 的问题,因为所有类似的问题都没有相同的应用程序共享弹出窗口。
UIActivityViewController 的标题如何设置?我有一个 UIActivityViewController,它使用自定义 UIActivityItemProvider 以及自定义 UIActivity。
显示在 UIActivityItemController 顶部的标题最初很简单,“ / ”,没有副标题,然后大约一秒钟后,它变为“ System@snap-2237692 ”,副标题为“ File ”,如下所示根据下面的屏幕截图。
这些标题来自哪里以及如何控制此处显示的内容?
我尝试显式设置视图控制器的“标题”属性,但没有什么区别。
我创建了一个 VC,其中包含一堆计算的打印和共享友好版本。当我按“共享”时,会出现小图标和所有共享选项,这很棒。我不知道如何在小图标旁边添加某种文件名。我认为如果我能完成这个任务,这看起来会更专业。
希望有一个简单的解决方案有人可以帮忙:)
这是我的代码:
import UIKit
class EvenPrintableViewController: UIViewController {
@IBOutlet weak var widthSizeTransfer: UILabel!
@IBOutlet weak var heightSizeTransfer: UILabel!
@IBOutlet weak var lengthTransfer: UILabel!
@IBOutlet weak var calcOutput: UILabel!
// Instantiate variables for Even transfer
var largeSizeRelay: String?
var lengthSizeRelay: String?
var heightRelay: String?
var calcOutputRelay: String?
override func viewDidLoad() {
super.viewDidLoad()
// Sets share icon to share/print view
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
// Assign labels to Metric Even VC values via instances above
widthSizeTransfer.text …Run Code Online (Sandbox Code Playgroud) 背景
shareImage()下面代码中的函数启动UIActivityViewController并共享图像,例如发送到消息或保存到照片。
图像共享后,UIActivityViewController完成并调用该completionWithItemsHandler函数activityComplete()。
该代码在 iOS / iPadOS / MacOS 上运行良好,符合预期并共享图像,但在 MacOS 上,该completionWithItemsHandler函数activityComplete()永远不会被调用,并使用标志确认print("Share complete.")。
Xcode 会记录以下输出:
Scene destruction request failed with error: (null)
问题
导致该completionWithItemsHandler函数activityComplete()无法在 MacOS 上调用的问题的原因是什么?如何在代码中纠正此问题?
代码
注意:根据答案添加了两行更新。
import UIKit
class ViewController: UIViewController {
var shareButton = UIButton(type: UIButton.ButtonType.custom)
var activityImage: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
// Create share button
shareButton.setTitle("Share", for:UIControl.State())
shareButton.setTitleColor(.white, for: UIControl.State())
shareButton.backgroundColor = .purple …Run Code Online (Sandbox Code Playgroud) 我在UIActivityViewiPad应用程序中创建了一个内容但我不知道在发送电子邮件时如何附加文件.我能怎么做?
我有一个UIActivityViewController,我想让它拥有safari所做的所有动作以及更多.目前我只能收到邮件,消息,推特,脸书和半工作副本.我用一个url设置了activity items数组.然后我添加了一个该URL的nsstring并添加了url,并且一切工作都很好,就像复制工作更好,通过复制字符串并将其粘贴到更多区域.但是当也有字符串时,twitter和facebook将url添加到他们的文本中并包含链接.我怎么能这样做他们没有文本,只有链接?另一个问题是如何在Twitter和Facebook活动的链接中显示Web视图预览?它只显示一个野生动物园图标.第三个问题是我如何打印网页的内容?
我正在创建一个QR码并将其存储为UIImage.现在我希望能够使用UIActivityViewController发送它,但不知何故它失败了:
func generateQRCode(from string: String) -> UIImage? {
let data = string.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
let transform = CGAffineTransform(scaleX: 3, y: 3)
if let output = filter.outputImage?.applying(transform) {
return UIImage(ciImage: output)
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
然后我调用该函数并将其存储为UIImage:
let image = generateQRCode(from: "Create my Code")
imgQRCode.image = image
Run Code Online (Sandbox Code Playgroud)
导出按钮使用以下操作:
@IBAction func shareButtonClicked(sender: UIButton) {
let objectsToShare = [imgQRCode.image!] as [AnyObject]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityVC.popoverPresentationController?.sourceView = sender
self.present(activityVC, animated: true, …Run Code Online (Sandbox Code Playgroud) swift ×8
ios ×6
xcode ×2
airdrop ×1
app-store ×1
email ×1
ios13 ×1
ipad ×1
mac-catalyst ×1
macos ×1
objective-c ×1
optimization ×1
printing ×1
qr-code ×1
share ×1
swift3 ×1
uiactivity ×1