首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UIActivityViewController未将多幅图像保存在照片库中

使用UIActivityViewController未将多幅图像保存在照片库中
EN

Stack Overflow用户
提问于 2018-08-17 12:22:03
回答 2查看 905关注 0票数 7

我需要在照片库中保存多个图像,用户可以从应用程序库中多次选择图像,然后可以将它们保存在iPhone照片库中。为了这个目的,我正在展示UIActivityViewController

假设用户选择10个或更多图像,并选择将它们保存到照片库中,则只保存7-8幅图像。

是否有任何方法可以将图像数组保存在照片库中而不发生任何故障?

谢谢

代码语言:javascript
复制
let images = Generic.fetchImagesFromMediaFiles(self.selectedMediaObj) // to fetch selected images

let activityViewController = UIActivityViewController(activityItems: images, applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil);

if let popoverPresentationController = activityViewController.popoverPresentationController {
    popoverPresentationController.sourceView = self.shareAllView
}
EN

回答 2

Stack Overflow用户

发布于 2018-08-23 06:15:57

iOS系统写照片保存到相册使用单线程,一个接一个做。如果你想同时保存更多的照片,它可能会丢失一些数据。

代码语言:javascript
复制
-(void)saveBtn
{
[SSGOTools againRequestPhotoWithblock:^(BOOL isAgree) {
if (isAgree) {

self.listOfImages = [NSMutableArray new];
int photoNum ;
photoNum = (int)_photoArray.count;
if (_photoArray.count > 9) {
photoNum = 9;
}
for (int i = 0; i < photoNum; i++) {
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:_photoArray[i]]];
UIImage *myImage = [UIImage imageWithData:data];
//[self.listOfImages addObject:myImage];
[self loadImageFinished:myImage];

}
}
}];
}

- (void)loadImageFinished:(UIImage *)image
{
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

//write photo save to album

[PHAssetChangeRequest creationRequestForAssetFromImage:image];

} completionHandler:^(BOOL success, NSError * _Nullable error) {

NSLog(@"success = %d, error = %@", success, error);
if(success){
dispatch_async(dispatch_get_main_queue(), ^{
[SSGOTools showInfoPopHint:@"Success"];
});
}
}];
}
票数 2
EN

Stack Overflow用户

发布于 2018-08-23 13:54:17

您需要在这里使用完成块来确保保存所有图像。试试这个:

代码语言:javascript
复制
-(void)saveBtn{
[SSGOTools againRequestPhotoWithblock:^(BOOL isAgree) {
    if (isAgree) {
        self.listOfImages = [NSMutableArray new];
        int photoNum ;
        photoNum = (int)_photoArray.count;
        if (_photoArray.count > 9) {
            photoNum = 9;
        }
        for (int i = 0; i < photoNum; i++) {
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:_photoArray[i]]];
            UIImage *myImage = [UIImage imageWithData:data];
            [self.listOfImages addObject:myImage];
           // [self loadImageFinished:myImage];
        }
       [self saveAllImages:self.listOfImages];
    }
}];
}
-(void)saveAllImages:(NSMutableArray *)images {
UIImage *image = [images firstObject];
[images removeObject:image];

[self loadImageFinished:image :^(bool success) {

    if (success){

        if (images.count > 0){
            [self saveAllImages:images];
        }else{
            // all images saved do whatever you want;
        }

    }else{
        NSLog(@"failed saving image");
    }

}];
}
- (void)loadImageFinished:(UIImage *)image :(void(^)(bool success))completion{
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

    //write photo save to album

    [PHAssetChangeRequest creationRequestForAssetFromImage:image];

} completionHandler:^(BOOL success, NSError * _Nullable error) {

    NSLog(@"success = %d, error = %@", success, error);
    if(success){
        dispatch_async(dispatch_get_main_queue(), ^{
            [SSGOTools showInfoPopHint:@"Success"];
        });
    }
    completion(success);
}];
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51895379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档