Enregistrer une vidéo avec UILongPressGestureRecognizer

Bonjour,


 


Je tente d'avoir un UIImagePickerController qui permet lors d'un touch sur un bouton de prendre une photo et lors d'un appuie long de prendre une vidéo, de la même manière que le fait Snapchat.


 


J'ai donc fait une sous-classe de UIImagePickerController :



import UIKit
import MobileCoreServices

class ImagePickerController: UIImagePickerController, UIGestureRecognizerDelegate {

var takeButton : UIButton

override init ()
{
takeButton = UIButton ();
super.init()

self.sourceType = UIImagePickerControllerSourceType.Camera
self.allowsEditing = false
self.showsCameraControls = false
self.mediaTypes = [kUTTypeMovie, kUTTypeImage]
self.videoMaximumDuration = 10
self.videoQuality = UIImagePickerControllerQualityType.TypeMedium;

let screenSize: CGRect = UIScreen.mainScreen().bounds

self.cameraOverlayView?.frame = CGRectMake(0, 0, screenSize.width, screenSize.height);


takeButton.frame = CGRectMake(0, 0 , 100, 100)
takeButton.center = CGPointMake(screenSize.width/2, screenSize.height - 60);
takeButton.setImage(UIImage(named: "takeButton.png"), forState: UIControlState.Normal)
takeButton.addTarget(self, action: "takePicture:", forControlEvents: UIControlEvents.TouchUpInside)

if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
{
let recognizer = UILongPressGestureRecognizer(target: self, action:Selector("holdAction:"))
recognizer.delegate = self
takeButton.addGestureRecognizer(recognizer)
}

self.cameraOverlayView?.clipsToBounds = true;
self.cameraOverlayView?.addSubview(takeButton)
}

func takePicture(sender:UIButton!)
{
self.cameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Photo;
self.takePicture()
}

func holdAction(recognizer: UILongPressGestureRecognizer)
{
self.cameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Video;
if recognizer.state == UIGestureRecognizerState.Began
{
self.startVideoCapture()
println("Video capturing...")
}
else if recognizer.state == UIGestureRecognizerState.Ended
{
self.stopVideoCapture()
println("End recording !");
}
}

required init(coder aDecoder: NSCoder) {
takeButton = UIButton ();
super.init(coder: aDecoder)
}

private override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
takeButton = UIButton ();
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
}

Pour le photo aucun problème mais pour la vidéo, ça ne marque qu'au second appuie long, lors du premier j'ai toujours une des erreurs suivantes :


 


- Camera: ignoring _previewStarted because waiting for session to be rebuilt


 


- UIImagePickerController: requested to stop video capture before recording stopped


 


- UIImagePickerController: ignoring request to stop video capture; camera is not currently capturing video


 


UIImagePickerController: ignoring request to change camera mode; camera is capturing a video.


 


J'ai beau regarder d'où viens le problème dans mon code je ne vois pas. Le seul sujet que j'ai trouvé sur stack c'est celui là  mais il n'y a pas de réponse : http://stackoverflow.com/questions/26355030/trying-to-take-video-with-uilongpressgesture


 


Merci d'avance pour votre aide.


 


Gautier


Connectez-vous ou Inscrivez-vous pour répondre.