亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS保存App中的照片到系統相冊或自建相冊的方法

2020-07-26 03:22:53
字體:
來源:轉載
供稿:網友

保存照片到系統相冊
保存照片到系統相冊這個功能很多社交類的APP都有的,今天我們簡單講解一下,如何將圖片保存到系統相冊(Photo Album)。

1.創建UIImageView

創建UIImageView是為了將照片展示出來,我們是要把UIImage保存到系統相冊(Photo Album):

復制代碼 代碼如下:

#define SCREEN [UIScreen mainScreen].bounds.size

self.image = [UIImage imageNamed:@"iOSDevTip"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake((SCREEN.width - 300) / 2, 70, 300, 150)];
imageView.image = self.image;
[self.view addSubview:imageView];

2.創建UIButton

創建UIButton并綁定actionClick:事件:

復制代碼 代碼如下:

UIButton *button = [[UIButton alloc] init];
button.frame = CGRectMake( 100, 300, SCREEN.width - 200, 40);
[button addTarget:self action:@selector(actionClick:) forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor orangeColor]];
[button setTitle:@"SavePhoto" forState:UIControlStateNormal];
[self.view addSubview:button];


- (void)actionClick:(UIButton *)button
{

}

3.保存照片到系統相冊(Photo Album)

在actionClick:方法里調用:

復制代碼 代碼如下:

UIImageWriteToSavedPhotosAlbum(self.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

這個時候,我們想知道保存是否成功,所以需要制定回調方法
復制代碼 代碼如下:

// 指定回調方法
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if(!error){
        NSLog(@"save success");
    }else{
        NSLog(@"save failed");
    }
}

在這個方法里,我們就知道照片是否保存成功。

保存照片到自己創建的相簿

接下來,我們來詳細講解一下關于系統相冊權限獲取、保存照片、創建自己的相簿等等功能。

1.創建自己的相簿

這也是一種比較創建的作法,創建自己的相簿,然后把照片或者視頻保存到自己的相簿中。相關代碼如下:

復制代碼 代碼如下:

  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library addAssetsGroupAlbumWithName:@"test" resultBlock:^(ALAssetsGroup *group) {

    //創建相簿成功

} failureBlock:^(NSError *error) {
    //失敗
}];


2.保存照片

這個方法也是將照片保存到系統相簿里面,不是保存到自己創建的相簿里面。代碼如下:

復制代碼 代碼如下:

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
[library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *asSetUrl,NSError *error){
    if (error) {
       //失敗
    }else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"存儲成功"
                                                       message:nil
                                                      delegate:nil
                                             cancelButtonTitle:@"確定"
                                             otherButtonTitles:nil, nil];
        [alert show];

    }
}];


3.獲取權限
在保存照片之前,如果用戶關閉相冊權限,這個時候是保存失敗的。如果你不做任何處理,用戶是不會知道自己保存失敗了。所以,我們可以在保存照片之前,做出相應的提示。如何獲取這個權限呢?一般有兩種方法:

(1)創建相簿失敗

(2)保存照片失敗

在上面兩個方法創建自己的相簿和保存照片的失敗結果里,我們可以彈出獲取照片權限失敗的提示。我們拿第一個創建相簿失敗來舉例:

復制代碼 代碼如下:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library addAssetsGroupAlbumWithName:@"test" resultBlock:^(ALAssetsGroup *group)    {

      //創建相簿成功

} failureBlock:^(NSError *error) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"存儲失敗"
                                                       message:@"請打開 設置-隱私-照片 來進行設置"
                                                      delegate:nil
                                             cancelButtonTitle:@"確定"
                                             otherButtonTitles:nil, nil];
    [alert show];
}];


在保存照片失敗的結果里,我們也可以彈出相應的提示,讓用戶打開應用程序的相冊權限。

4.保存照片到自己的相簿

下面這段代碼是在大谷歌里面找到的,親自測試過是可以用的,整理如下:

復制代碼 代碼如下:

#pragma mark - 創建相冊
- (void)createAlbum
{
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    NSMutableArray *groups=[[NSMutableArray alloc]init];
    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group)
        {
            [groups addObject:group];
        }

        else
        {
            BOOL haveHDRGroup = NO;

            for (ALAssetsGroup *gp in groups)
            {
                NSString *name =[gp valueForProperty:ALAssetsGroupPropertyName];

                if ([name isEqualToString:@"iOSDevTip"])
                {
                    haveHDRGroup = YES;
                }
            }

            if (!haveHDRGroup)
            {
                //do add a group named "XXXX"
                [assetsLibrary addAssetsGroupAlbumWithName:@"iOSDevTip"
                                               resultBlock:^(ALAssetsGroup *group)
                 {
                     [groups addObject:group];

                 }
                                              failureBlock:nil];
                haveHDRGroup = YES;
            }
        }

    };
    //創建相簿
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:listGroupBlock failureBlock:nil];

    [self saveToAlbumWithMetadata:nil imageData:UIImagePNGRepresentation(self.image) customAlbumName:@"iOSDevTip" completionBlock:^
     {
         //這里可以創建添加成功的方法

     }
                     failureBlock:^(NSError *error)
     {
         //處理添加失敗的方法顯示alert讓它回到主線程執行,不然那個框框死活不肯彈出來
         dispatch_async(dispatch_get_main_queue(), ^{

             //添加失敗一般是由用戶不允許應用訪問相冊造成的,這邊可以取出這種情況加以判斷一下
             if([error.localizedDescription rangeOfString:@"User denied access"].location != NSNotFound ||[error.localizedDescription rangeOfString:@"用戶拒絕訪問"].location!=NSNotFound){
                 UIAlertView *alert=[[UIAlertView alloc]initWithTitle:error.localizedDescription message:error.localizedFailureReason delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) otherButtonTitles: nil];

                 [alert show];
             }
         });
     }];
}

- (void)saveToAlbumWithMetadata:(NSDictionary *)metadata
                      imageData:(NSData *)imageData
                customAlbumName:(NSString *)customAlbumName
                completionBlock:(void (^)(void))completionBlock
                   failureBlock:(void (^)(NSError *error))failureBlock
{

    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    __weak ALAssetsLibrary *weakSelf = assetsLibrary;
    void (^AddAsset)(ALAssetsLibrary *, NSURL *) = ^(ALAssetsLibrary *assetsLibrary, NSURL *assetURL) {
        [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

                if ([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:customAlbumName]) {
                    [group addAsset:asset];
                    if (completionBlock) {
                        completionBlock();
                    }
                }
            } failureBlock:^(NSError *error) {
                if (failureBlock) {
                    failureBlock(error);
                }
            }];
        } failureBlock:^(NSError *error) {
            if (failureBlock) {
                failureBlock(error);
            }
        }];
    };
    [assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
        if (customAlbumName) {
            [assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
                if (group) {
                    [weakSelf assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                        [group addAsset:asset];
                        if (completionBlock) {
                            completionBlock();
                        }
                    } failureBlock:^(NSError *error) {
                        if (failureBlock) {
                            failureBlock(error);
                        }
                    }];
                } else {
                    AddAsset(weakSelf, assetURL);
                }
            } failureBlock:^(NSError *error) {
                AddAsset(weakSelf, assetURL);
            }];
        } else {
            if (completionBlock) {
                completionBlock();
            }
        }
    }];
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品爽黄69天堂a| 久久夜色精品亚洲噜噜国产mv| 欧美大片在线免费观看| 搡老女人一区二区三区视频tv| 1769国产精品| 精品女厕一区二区三区| 国产成人精品综合| 精品国产依人香蕉在线精品| 国产欧美日韩精品在线观看| 91a在线视频| 欧美激情伊人电影| 麻豆一区二区在线观看| 精品国产电影一区| 57pao成人国产永久免费| 亚洲欧洲在线视频| 亚洲色图激情小说| 欧美精品在线观看91| 一区二区三区无码高清视频| 欧美成年人网站| 国产精品视频专区| 亚洲欧美国产精品va在线观看| 日韩毛片在线观看| 亚洲一级黄色av| 久久夜色精品国产欧美乱| 精品国偷自产在线视频99| 全亚洲最色的网站在线观看| 成人免费在线视频网址| 91禁外国网站| 欧美一性一乱一交一视频| 亚洲欧美综合精品久久成人| 亚洲国产成人精品电影| 成人免费直播live| 国产午夜一区二区| 成人性生交大片免费观看嘿嘿视频| 欧美性开放视频| 国产亚洲精品一区二555| 国产精品高潮呻吟视频| 最近中文字幕日韩精品| 亚洲欧美在线x视频| 亚洲欧美日本伦理| 91日本在线视频| 性欧美xxxx视频在线观看| 日韩精品中文字幕视频在线| 91久久久久久久久久久久久| 一级做a爰片久久毛片美女图片| 91综合免费在线| 欧美激情在线观看| 国产精品免费一区| 92版电视剧仙鹤神针在线观看| 精品一区二区电影| 亚洲欧美第一页| 欧美午夜女人视频在线| 欧美在线视频观看免费网站| 亚洲精品国产精品乱码不99按摩| 欧美有码在线视频| 国产成人精品久久二区二区91| 国产亚洲美女精品久久久| 欧美电影在线观看网站| 2019国产精品自在线拍国产不卡| 66m—66摸成人免费视频| 国产成人鲁鲁免费视频a| 亚洲人成网站色ww在线| 成人乱人伦精品视频在线观看| 国产精品黄色影片导航在线观看| 成人网欧美在线视频| 91福利视频网| 亚洲欧洲视频在线| 精品中文字幕乱| 4444欧美成人kkkk| 欧美在线激情网| 国产精品jizz在线观看麻豆| 日韩精品999| 久久91精品国产91久久久| 欧美激情亚洲视频| 性欧美办公室18xxxxhd| 欧美极品少妇xxxxx| 久久久中文字幕| 美女精品久久久| 日韩精品在线第一页| 日韩欧美精品中文字幕| 亚洲**2019国产| 国产精自产拍久久久久久蜜| 爽爽爽爽爽爽爽成人免费观看| 色婷婷久久一区二区| 日韩中文在线不卡| 国产成+人+综合+亚洲欧美丁香花| 国产欧美va欧美va香蕉在| 26uuu另类亚洲欧美日本老年| 久久免费高清视频| 日韩高清欧美高清| 成人福利网站在线观看| 在线观看不卡av| 亚洲国产精久久久久久久| 欧美亚洲午夜视频在线观看| 欧美限制级电影在线观看| 日韩精品视频在线观看网址| 国产精品99蜜臀久久不卡二区| 久久黄色av网站| 国产精自产拍久久久久久| 另类图片亚洲另类| 日本精品一区二区三区在线| 77777亚洲午夜久久多人| 久久成人18免费网站| 欧美激情在线狂野欧美精品| 国产日韩在线看片| 欧美性猛交xxxx乱大交3| 欧美一区二区三区……| 国产视频999| 亚洲欧美成人精品| 国产精品久久久久久久9999| 性欧美激情精品| 国产精品美女主播| 日韩精品高清在线| 亚洲a∨日韩av高清在线观看| 正在播放亚洲1区| 亚洲男人的天堂在线播放| 98视频在线噜噜噜国产| 热99精品只有里视频精品| 18久久久久久| 一本色道久久综合亚洲精品小说| 国产精品一二区| 精品久久久久久久久久久| 国产精品欧美在线| 久久躁日日躁aaaaxxxx| 中文字幕v亚洲ⅴv天堂| 日韩网站免费观看| 欧美成人手机在线| 亚洲精品久久在线| 欧美国产日韩视频| 国产激情久久久久| 欧美一级大片在线免费观看| 午夜精品久久久久久久99黑人| 日韩中文字幕第一页| 日韩av在线最新| 视频在线一区二区| 久久久亚洲欧洲日产国码aⅴ| 欧美丰满少妇xxxxx| 国产精品影院在线观看| 欧美日韩国产中文精品字幕自在自线| 亚洲国产精品电影| 精品久久久久久中文字幕大豆网| 午夜精品久久久久久99热| 日本午夜精品理论片a级appf发布| 国产一区二区三区欧美| 亚洲男人天堂网站| 91久久久久久久一区二区| 人人做人人澡人人爽欧美| 久久伊人91精品综合网站| 亚洲夜晚福利在线观看| 午夜精品99久久免费| 92国产精品久久久久首页| 538国产精品视频一区二区| 成人国产精品一区二区| 一区二区三区四区在线观看视频| 国内久久久精品| 亚洲色图综合网| 日韩专区在线播放| 国产视频亚洲视频| 91精品国产自产在线| 色综合色综合久久综合频道88| 日韩国产精品亚洲а∨天堂免| 欧美日韩在线免费观看| 日韩欧美成人精品| 国产在线拍偷自揄拍精品|