Ios 从图像阵列创建动画

Ios 从图像阵列创建动画,ios,swift,Ios,Swift,我无法拍摄6张照片并将其存储在对象数组中以设置动画。我不断听到一个错误,说: 数组索引超出范围 此外,我还意识到,由于某种原因,在if语句之外无法识别“image”对象。我做错了什么 func didPressTakePhoto(){ var picArray: [UIImage] = [] for index in 1...6 { if let videoConnection = stillImageOutput?.connectionWithMediaT

我无法拍摄6张照片并将其存储在对象数组中以设置动画。我不断听到一个错误,说:

数组索引超出范围

此外,我还意识到,由于某种原因,在if语句之外无法识别“image”对象。我做错了什么

func didPressTakePhoto(){

    var picArray: [UIImage] = []

    for index in 1...6 {

        if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
            videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
            stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
                (sampleBuffer, error) in

                    if sampleBuffer != nil {


                        let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                        let dataProvider  = CGDataProviderCreateWithCFData(imageData)
                        let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)

                        let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)

                        self.tempImageView.image = image
                        self.tempImageView.hidden = false

                        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

                        picArray[index] = image;
                    }

            })

        }
    }
    self.gifView.animationImages = picArray;
    self.gifView.animationDuration = 1.0
    self.gifView.startAnimating()
}

picArray
为空,因此不应使用
insert
方法。相反,您必须使用
append
方法

当您在
异步
块中插入值时,is
picArray
的原因为空。for循环在插入映像之前完成,因为它不等待异步块完成

在设置图像视图的动画之前,必须等待
异步
块完成

您可以使用
dispatch\u group

 func didPressTakePhoto(){

    var picArray: [UIImage] = []

    let dispatchGroup = dispatch_group_create()

    for index in 1...6 {

        dispatch_group_enter(dispatchGroup)

        if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
            videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
            stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
                (sampleBuffer, error) in

                if sampleBuffer != nil {


                    let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                    let dataProvider  = CGDataProviderCreateWithCFData(imageData)
                    let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)

                    let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)

                    self.tempImageView.image = image
                    self.tempImageView.hidden = false

                    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

                    picArray.append(image);
                }

                dispatch_group_leave(dispatchGroup)

            })

        } else {
            dispatch_group_leave(dispatchGroup)
        }
    }

    dispatch_group_notify(dispatchGroup, dispatch_get_main_queue()) {
        self.gifView.animationImages = picArray;
        self.gifView.animationDuration = 1.0
        self.gifView.startAnimating()
    }

}

希望这能有所帮助。

您的
picArray
为空,您试图将元素设置为不存在的给定索引–您是否打算使用
.append()