Ios 以阵列形式存储来自摄影机卷的所有图像

Ios 以阵列形式存储来自摄影机卷的所有图像,ios,objective-c,uiimage,slideshow,alassetslibrary,Ios,Objective C,Uiimage,Slideshow,Alassetslibrary,我对iOS和Objective-C非常陌生,但我正在尝试创建一个应用程序,该应用程序包含一个组件,该组件可以从相机卷中获取所有图像,并从中创建幻灯片。我相信第一步是从存储在相机卷中的所有图像创建一个数组。然后我可以从这个数组创建一个动画。目前,我有一个指定为“播放”的按钮,选中该按钮后,该幻灯片将显示为UIImageView。但是,我的代码现在不起作用。如有任何帮助或建议,将不胜感激。以下是我目前的代码: - (IBAction)play:(id)sender { NSMutableArray

我对iOS和Objective-C非常陌生,但我正在尝试创建一个应用程序,该应用程序包含一个组件,该组件可以从相机卷中获取所有图像,并从中创建幻灯片。我相信第一步是从存储在相机卷中的所有图像创建一个数组。然后我可以从这个数组创建一个动画。目前,我有一个指定为“播放”的按钮,选中该按钮后,该幻灯片将显示为UIImageView。但是,我的代码现在不起作用。如有任何帮助或建议,将不胜感激。以下是我目前的代码:

- (IBAction)play:(id)sender {
NSMutableArray *allPhotos= [[NSMutableArray alloc]init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    [group setAssetsFilter:[ALAssetsFilter allPhotos]];
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
        if (result == nil) {
            return;
        }

        ALAssetRepresentation *representation = [result defaultRepresentation];
        UIImage *image = [UIImage imageWithCGImage:[representation fullScreenImage]];
        [allPhotos addObject:image];
    }];

} failureBlock: ^(NSError *error) {

    NSLog(@"No groups");
}];

UIImageView *animationImageView = [[UIImageView alloc] initWithFrame:CGRectMake(60, 95, 86, 193)];
animationImageView.animationImages = allPhotos;
animationImageView.animationDuration = 0.5;

[self.view addSubview:animationImageView];
[animationImageView startAnimating];
}

因为现在不推荐使用该库,而照片框架是新的。我在Objective C中创建了自己的函数,用于从相机卷中获取所有照片,并存储在NSArray中,并显示在我的Collectionview中

 NSArray *imageArray;
 NSMutableArray *mutableArray;

    -(void)getAllPhotosFromCamera
    {
        imageArray=[[NSArray alloc] init];
        mutableArray =[[NSMutableArray alloc]init];

        PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
        requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
        requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
        requestOptions.synchronous = true;
        PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];

        NSLog(@"%d",(int)result.count);

        PHImageManager *manager = [PHImageManager defaultManager];
        NSMutableArray *images = [NSMutableArray arrayWithCapacity:[result count]];

        // assets contains PHAsset objects.

        __block UIImage *ima;
        for (PHAsset *asset in result) {
            // Do something with the asset

            [manager requestImageForAsset:asset
                               targetSize:PHImageManagerMaximumSize
                              contentMode:PHImageContentModeDefault
                                  options:requestOptions
                            resultHandler:^void(UIImage *image, NSDictionary *info) {
                                ima = image;

                                [images addObject:ima];
                            }];


        }

        imageArray = [images copy];  // You can direct use NSMutuable Array images
    }

如果您告诉我们您发布的代码有什么问题,这会有所帮助。而且您确实意识到枚举是异步的,因此您尝试使用
UIImageView
allPhotos
早在枚举完成之前就已经完成了。我希望您意识到,您的应用程序将因内存占用过多而崩溃任何人在他们的相机卷中有超过几个图像。问题是它没有从相机卷返回任何图像或进行幻灯片放映。如果它会因为太多的内存使用而崩溃,那么制作幻灯片的最佳策略是什么?是否可以使用相机卷,或者我需要如何在应用程序中保存照片?你看到我的第二条评论了吗?