2016-10-19 4 views
1

Dieser Code verfügt über eine spezielle Kamera mit einer Kamera, in die ein Titel eingebettet ist. Wenn das Foto in der Fotogalerie gespeichert wird, befindet sich der Titel auf dem Foto. Die Kamera funktioniert gut, aber das Foto wird nicht gespeichert. Ich muss nur herausfinden, wie ich die Fotos in der Fotogalerie speichern kann. Ich habe die PLIST geändert, um den Zugriff auf Fotogalerie und Kamera zu ermöglichen.Swift 3; Foto wird nicht in Fotogalerie gespeichert

import Foundation 
    import UIKit 



class ViewController: UIViewController, OverlayViewControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

var picker = UIImagePickerController() 

@IBAction func letsDoThis(_ sender: AnyObject) { 
      if UIImagePickerController.availableCaptureModes(for: .rear) != nil { 
     picker = UIImagePickerController() 
     picker.allowsEditing = false 
     picker.sourceType = .camera 
     picker.cameraCaptureMode = .photo 
     picker.showsCameraControls = false 
     let overlayViewController = OverlayViewController(nibName:"OverlayView", bundle: nil) 
     let overlayView: OverlayView = overlayViewController.view as! OverlayView 
     overlayView.frame = self.picker.view.frame 

     overlayView.delegate = self 

     picker.modalPresentationStyle = .fullScreen 
     present(picker, animated: true, completion: { 


      self.picker.cameraOverlayView = overlayView 
     }) 
    } else { 
     let alert = UIAlertController(title: "No Camera", message: "That's weird. No camera.", preferredStyle: .alert) 
     let okay = UIAlertAction(title: "Alright Then.", style: .default, handler: nil) 
     alert.addAction(okay) 
     present(alert, animated: true, completion: nil) 
    } 
} 



override func viewDidLoad() { 
    super.viewDidLoad() 
      picker.delegate = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    picker.dismiss(animated: true, completion: nil) 
} 

//MARK: Image Picker Controller Delegates 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    UIImageWriteToSavedPhotosAlbum(chosenImage, self,nil, nil) 

     dismiss(animated: true, completion: nil) 
} 

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
    dismiss(animated: true, completion: nil) 
    print("Canceled!!") 
} 

func didCancel(overlayView: OverlayView) { 
    dismiss(animated: true, completion: nil) 
    print("dismissed!!") 
} 
func didShoot(overlayView: OverlayView) { 
    picker.takePicture() 
    overlayView.cameraLabel.text = "Shot Photo" 
    print("Shot Photo") 
} 
} 
+0

Klingt so, als würden Sie sagen, dass der Aufruf von 'UIImageWriteToSavedPhotosAlbum' das Bild nicht wirklich im Fotoalbum speichert, richtig? Lesen Sie die Dokumentation für 'UIImageWriteToSavedPhotosAlbum' und nutzen Sie die zusätzlichen Parameter, an denen Sie' nil' übergeben, damit Sie herausfinden können, was passiert. – rmaddy

+0

Ja das ist richtig. Was meinst du mit zusätzlichen Perimetern? –

+0

Er meint die beiden letzten Parameter von 'UIImageWriteToSavedPhotosAlbum', die Sie auf' nil' setzen. Sie können hier in den Dokumenten https://developer.apple.com/reference/uikit/1619125-uiimagewritetosavedphotosalbum nachschauen. Die letzten drei Parameter sind optional. Aber das sollte nicht die Ursache für Ihr Problem sein, denke ich – ronatory

Antwort

1

könnte dies nicht die Lösung, aber vielleicht wird es dauern Sie weiter, warum das Bild nicht gespeichert (Hinweis von rmaddy in den Kommentaren der Frage). Um zu sehen, ob es ein Fehler beim Speichern, verwenden Sie die completionTarget und completionSelector Parameter wie die (Siehe auch die docs):

Fügen Sie die completionSelector Methode:

func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeMutableRawPointer) { 
    guard error == nil else { 
    print("Error saving image: \(error)") 
    return 
    }  
    print("Image saved successfully") 
} 

ändern UIImageWriteToSavedPhotosAlbum auf diese

UIImageWriteToSavedPhotosAlbum(chosenImage, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil)