2015-03-25 13 views
8

Ich bin neu in der App Entwicklung, so dass dies eine triviale Frage sein kann, aber bitte helfen!Video speichern; Verwenden von UIImagePickerController; IOS 8 Swift

Ich versuche, ein Video in der Camera Roll mit der UIImagePickerController-Klasse zu speichern. Bisher war es mir gelungen, die Kamera hochzuziehen und ein Bild zu speichern. Ich war auch in der Lage, Video aufzunehmen, aber wenn ich "Video verwenden" drücke, wird die Kamera nicht gespeichert.

Unten ist die angefügte Funktion didFinishPickingMediaWithInfo.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) 
{ 
    let mediaType = info[UIImagePickerControllerMediaType] as NSString 

    self.dismissViewControllerAnimated(true, completion: nil) 

    if mediaType.isEqualToString(kUTTypeImage as NSString) 
    { 
     let image = info[UIImagePickerControllerOriginalImage] as UIImage 

     if (newMedia == true) 
     { 
      UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) 
     } 

     else if mediaType.isEqualToString(kUTTypeMovie as NSString) 
     { 
      let videoPath = info[UIImagePickerControllerMediaURL] as NSString 

      if(newMedia == true) 
      { 
       UISaveVideoAtPathToSavedPhotosAlbum(videoPath, self, 
        "image:didFinishSavingWithError:contextInfo:", nil) 
      } 
     } 
    } 
} 

Hier ist die UseVideo-Routine.

@IBAction func useVideo(sender: AnyObject) 
{ 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) 
    { 

     let imagePicker = UIImagePickerController() 

     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.Camera 
     imagePicker.mediaTypes = [kUTTypeMovie as NSString] 
     imagePicker.allowsEditing = false 

     self.presentViewController(imagePicker, animated: true, completion: nil) 

     newMedia = true 

    } 
} 

Hier ist die KameraRolle.

@IBAction func useCameraRoll(sender: AnyObject) { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){ 

     let imagePicker = UIImagePickerController() 

     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
     imagePicker.mediaTypes = [kUTTypeImage as NSString] 
     imagePicker.mediaTypes = [kUTTypeMovie as NSString] 
     imagePicker.allowsEditing = false 

     self.presentViewController(imagePicker, animated: true, completion: nil) 

     newMedia = false 
    } 
} 
+1

'imagePicker .mediaTypes' sollte so eingestellt werden -> 'imagePicker.mediaTypes = [kUTTypeImage als String, kUTTypeImage als String]' – Husam

Antwort

5

Sie haben nicht übereinstimmen, wenn Sie in der Nähe sind.

 if mediaType.isEqualToString(kUTTypeImage as NSString) 
     { 
      let image = info[UIImagePickerControllerOriginalImage] as UIImage 

      if (newMedia == true) 
      { 
       UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) 
      } 

} // < --here Sie schließen, wenn die Bedingung für die Bild add}

 else if mediaType.isEqualToString(kUTTypeMovie as NSString) 
      { 
+0

Danke für die Eingabe, aber das hat nicht funktioniert. Es hat einen Trap-Fehler verursacht. – Matthew

+0

Ich hoffe, Sie haben nicht kopiert/eingefügt **} ** es ist nur zu zeigen, wo Sie einfügen können} – user3344236

+0

Nein, ich schloss einfach die if-Klammer von kUTTypeImage. – Matthew

0

Sie Video mit diesem speichern kann, hoffe, es hilft -

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    let mediaType = info[UIImagePickerControllerMediaType] as! NSString 

    if mediaType.isEqual(to: kUTTypeMovie as NSString as String) 
    { 
     // Is Video 
     let url: URL = info[UIImagePickerControllerMediaURL] as! URL 

     assetsLibrary.writeVideoAtPath(toSavedPhotosAlbum: url, completionBlock: { 
      (nsurl, error) -> Void in 
      if let theError = error{ 
       print("Error saving video = \(theError)") 
       self.dismiss(animated: true, completion: nil) 
      } 
      else { 
       print("no errors happened") 
      } 
     }) 
    } 
} 
Verwandte Themen