【问题标题】:How do I give screenshot file a filename when sharing via UIActivityView通过 UIActivityView 共享时如何为屏幕截图文件指定文件名
【发布时间】:2020-12-18 11:59:45
【问题描述】:

我创建了一个 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 = witdhSizeRelay
    heightSizeTransfer.text = heightSizeRelay
    heightTransfer.text = heightRelay
    calcOutput.text = calcOutputRelay

}

// Share function for share button
@objc func shareTapped() {
    
    let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
    let image = renderer.image { ctx in
        view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
    }

    let vc = UIActivityViewController(activityItems: [image], applicationActivities: [])
    vc.excludedActivityTypes = [.assignToContact, .addToReadingList]
    vc.popoverPresentationController?.barButtonItem = navigationItem.rightBarButtonItem
    present(vc, animated: true)
}
}

【问题讨论】:

    标签: swift xcode share uiactivityviewcontroller


    【解决方案1】:

    首先将UIImage保存为一个临时的png/jpg文件:

    guard let imageData = image.pngData() else { return }
    

    然后将其保存为临时文件,让您可以选择文件名:

    let tempDir = FileManager.default.temporaryDirectory
    let imgFileName = "YOUR_IMG_FILE_NAME.png"
    let tempImgDir = tempDir.appendingPathComponent(imgFileName)
    try? imageData.write(to: tempImgDir)
    

    然后您可以改为共享 URL:

    // Your code
    let vc = UIActivityViewController(activityItems: [tempImgDir], applicationActivities: [])
    

    附:该文件只是临时文件。

    【讨论】:

    • 如果我决定将其保存为字符串,这将如何工作?我无法找出字符串类型为 stringFile 的第一行。没有 txtData() 类型
    • 您不需要txtData。试试这个:try? str.write(to: tempStrPath, atomically: true, encoding: String.Encoding.utf8).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多