iOS使用相机和UILongPressGestureRecognizer录制视频

3
我将尝试创建一个UIImagePickerController子类,可以通过简单的触摸拍照,长时间触摸录制视频,就像Snapchat一样。
以下是我的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)
    }
}

对于图片部分没有问题,但对于视频工作,第一次触摸时我总是遇到以下错误之一:
  • 相机:因等待会话重建而忽略_previewStarted

  • UIImagePickerController:在记录停止之前请求停止视频捕获

  • UIImagePickerController:忽略请求停止视频捕获;相机当前未捕获视频

  • UIImagePickerController:忽略请求更改相机模式;相机正在捕获视频

您有解决此问题的想法吗?

请问您能否展示一下如何解决视频的长按触摸问题? - Superian007
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接