2017-02-15 5 views
2

Swift 3, Xcode 8, IOS:Попытка сделать кнопку скриншота, которая отправляет скриншот на мой кадр камеры, когда нажимается кнопка. 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) 
    } 
} 
} 

ответ

2

Проблема вы поставили скриншот принимая код внутри вложенной функции вашего 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)   
} 
+0

«Это приложение разбился из-за он попытался получить доступ к конфиденциальным данным без описания использования. Info.plist приложения m ust содержит ключ NSPhotoLibraryUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные. (lldb) " – DanielG

+0

@ DanielG Отметьте этот ответ для этого http://stackoverflow.com/a/40012626/6433023 и добавьте библиотеку фотографий конфиденциальности в вас info.plist –

+0

ДА, СПАСИБО! :) – DanielG

1

В Swift 3,1

Прежде всего, необходимо отредактировать файл info.plist enter image description here

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() 
      } 
     }) 
    } 
} 
Смежные вопросы