Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用iphone';斯威夫特的照相机_Ios_Iphone_Swift - Fatal编程技术网

Ios 使用iphone';斯威夫特的照相机

Ios 使用iphone';斯威夫特的照相机,ios,iphone,swift,Ios,Iphone,Swift,我的目标是,当用户按下一个按钮时,几个视频帧被尽可能快地捕获,并最终保存到iphone的相册中 我不熟悉swift,所以我使用了一个非常糟糕的实现。我用0定义一个整数,并将其更改为用户按下按钮时要捕获的帧号 var number:Int? = 0 @IBAction func takeFrames(sender: UIButton) { self.number=5; } 然后在代理中,我将这些帧保存到相册: func captureOutput(captureOutput: AVCa

我的目标是,当用户按下一个按钮时,几个视频帧被尽可能快地捕获,并最终保存到iphone的相册中

我不熟悉swift,所以我使用了一个非常糟糕的实现。我用0定义一个整数,并将其更改为用户按下按钮时要捕获的帧号

var number:Int? = 0

@IBAction func takeFrames(sender: UIButton) {
    self.number=5;
}
然后在代理中,我将这些帧保存到相册:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
    if(number>0) {
        let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer)
        let img = UIImagePNGRepresentation(rawImage)
        let pngImg = UIImage.init(data: img!)
        UIImageWriteToSavedPhotosAlbum(pngImg!, nil, nil, nil)
        print("PNG frame write to photo album successfully")
        number = number!-1;
    }

}
我的问题是:

1) 我可以使用更优雅和安全的方式来使用按钮来控制帧捕获吗

2) 目前,我一个一个地保存帧,所以我没有达到尽快捕获帧的目标,我能捕获我需要的所有帧并最终将它们保存到相册中吗

提前谢谢

尝试这样做:

    let imageArray: NSMutableArray?
    for _ in 0 ..< 5  {
        let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer)
        let img = UIImagePNGRepresentation(rawImage)
        let pngImg = UIImage.init(data: img!)
        imageArray?.addObject(pngImg!)

    }
    for image in imageArray! {
        UIImageWriteToSavedPhotosAlbum(image as! UIImage, nil, nil, nil)
    }
    print("PNG frame write to photo album successfully")
让imageArray:NSMutableArray?
对于0..<5中的uu{
让rawImage:UIImage=self.imageFromSampleBuffer(sampleBuffer)
设img=uiImagePngRespresentation(rawImage)
让pngImg=UIImage.init(数据:img!)
imageArray?.addObject(pngImg!)
}
对于imageArray中的图像!{
UIImageWriteToSavedPhotosAlbum(图像为!UIImage,nil,nil,nil)
}
打印(“PNG帧成功写入相册”)

斯威夫特有时会混淆语句的含义。这将拍摄“5”张图像

谢谢。根据您的建议,我使用“var imageArray=[CMSampleBuffer?]()”来获取所有帧,最后进行转换并保存工作。对我的问题1有什么建议吗?@JunFang不确定。您可以尝试使用保护语句或try块。那肯定会使它安全。不过我觉得你很好。