尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS
Posted
技术标签:
【中文标题】尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS【英文标题】:Trying to make a screenshot button that sends the screenshot to my camera roll, when the button is clicked. Swift 3, Xcode 8, IOS 【发布时间】:2017-02-15 17:14:21 【问题描述】:Swift 3、Xcode 8、ios:
我似乎无法弄清楚自己做错了什么,没有显示任何错误,但是当我单击应用程序中的按钮时,没有任何反应,并且没有任何内容保存在我的模拟器相机胶卷中。
这是我为视图控制器中的按钮所做的:
import UIKit
class ViewController: ViewController
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
@IBAction func buttonAction(_ sender: UIButton)
func captureScreen()
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale)
view.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
【问题讨论】:
【参考方案1】:问题是你把截图代码放在你的buttonAction
方法名称captureScreen
的嵌套函数中,并且从未调用过该方法,不需要添加嵌套方法。因此,只需删除该函数并将屏幕截图代码直接放在按钮操作方法中即可。所以用这个替换你的按钮操作。
@IBAction func buttonAction(_ sender: UIButton)
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale)
view.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
【讨论】:
"这个应用程序已经崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用程序的 Info.plist 必须包含一个 NSPhotoLibraryUsageDescription 键和一个字符串值,向用户解释应用程序如何使用它数据。(lldb)“ @DanielG 检查这个答案 ***.com/a/40012626/6433023 并在 info.plist 中添加隐私照片库 好的,谢谢! :) @DanielG 欢迎朋友 :) @NiravD +1 非常感谢,它有帮助【参考方案2】:在 Swift 3.1 中
首先你需要编辑你的 info.plist 文件
import Photos
然后添加uibutton:
@IBOutlet weak var shutterButton: UIButton!
@IBAction func shotAction(_ sender: Any)
guard shutterButton.isEnabled else
return
let takeScreenshotBlock =
//Render and capture an UIView named view:
self.shutterButton.isHidden = true
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0.0)
self.view.drawHierarchy(in: self.view.frame, afterScreenUpdates: true)
if let image = UIGraphicsGetImageFromCurrentImageContext()
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
UIGraphicsEndImageContext();
self.shutterButton.isHidden = false
DispatchQueue.main.async
// briefly flash the screen
let flashOverlay = UIView(frame: self.sceneView.frame)
flashOverlay.backgroundColor = UIColor.white
self.sceneView.addSubview(flashOverlay)
UIView.animate(withDuration: 0.25, animations:
flashOverlay.alpha = 0.0
, completion: _ in
flashOverlay.removeFromSuperview()
)
switch phphotoLibrary.authorizationStatus()
case .authorized:
takeScreenshotBlock()
case .restricted, .denied:
let alertController = UIAlertController(title: "Photo access denied", message: "Please enable Photos Library access for this appliction in Settings > Privacy.", preferredStyle: UIAlertControllerStyle.alert)
let actionOK = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(actionOK)
present(alertController, animated: true, completion: nil)
case .notDetermined:
PHPhotoLibrary.requestAuthorization( (status) in
if status == .authorized
takeScreenshotBlock()
)
【讨论】:
以上是关于尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS的主要内容,如果未能解决你的问题,请参考以下文章