Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] Enregistrer une vidéo avec UILongPressGestur

swift

    31 octobre 2014 à 21:54:18

    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.

    Merci d'avance pour votre aide.

    Gautier

    • Partager sur Facebook
    • Partager sur Twitter

    [iOS] Enregistrer une vidéo avec UILongPressGestur

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown