Endereço original: https://www.cnblogs.com/muzichenyu/p/6006856.html
Entre os aplicativos convencionais no mercado, a maioria dos aplicativos tem a capacidade de armazenar imagens no álbum de fotos de seus próprios aplicativos. O método fornecido pela Apple só pode armazenar imagens no álbum de fotos do sistema. Veja como fazer isso:
Ideias de implementação:
1. O pré-requisito para operar o álbum de fotos do sistema deve ser importado #import <Photos / Photos.h>
2. Depois que o usuário clicar em salvar, primeiro determine se o usuário permite que o aplicativo acesse o álbum. Caso contrário, lembre ao usuário que a permissão é necessária para abrir.
3. Após entrar no álbum do usuário, primeiro determine se há alguma alteração no álbum onde o App armazena as imagens.Se houver, armazene as imagens diretamente, caso contrário, crie um novo álbum.
4. A imagem de espaço reservado é usada quando a imagem é armazenada no álbum.
Implementação:
// 1. Obtenha o status de autorização do usuário, existem quatro status
// 1) PHAuthorizationStatusNotDetermined não tenho certeza
// 2) PHAuthorizationStatusRestricted, controle parental, rejeitado
// 3) PHAuthorizationStatusDenied, negado
// 4) Autorização PHAuthorizationStatusAuthorized
PHAuthorizationStatus status = [PHPhotoLibrary authorityStatus];
// 2. Determine o status de autorização do usuário
if (status == PHAuthorizationStatusNotDetermined) {
// Se o status for incerto, o conteúdo no bloco irá esperar até que a autorização seja concluída antes de chamar
[PHPhotoLibrary requestAuthorization: ^ (PHAuthorizationStatus status) {
// Chamado após a autorização ser concluída
if (status == PHAuthorizationStatusAuthorized) {
// Chame o método de armazenamento de imagens
[self savePhoto];
}
}];
// Se o acesso for permitido
} else if (status == PHAuthorizationStatusAuthorized) {
// Chame o método de armazenamento de imagens
[self savePhoto];
// Se a permissão for negada
} outro {
// Usando uma estrutura de terceiros, uma página aparece para solicitar que o usuário abra a autorização
// [SVProgressHUD showInfoWithStatus: @ "Entre na interface de configurações -> encontre o aplicativo atual -> ligue a chave para permitir o acesso ao álbum"];
}
#pragma mark-Este método obtém se o álbum do aplicativo foi criado na galeria
// A função deste método é pegar todos os álbuns do sistema e percorrer, caso exista um álbum, retornar ao álbum, caso não retorne nulo o parâmetro é o nome do álbum a ser criado
- (PHAssetCollection *) fetchAssetColletion: (NSString *) albumTitle
{
// Obter todos os álbuns
PHFetchResult * result = [PHAssetCollection fetchAssetCollectionsWithType: PHAssetCollectionTypeAlbum subtipo: PHAssetCollectionSubtypeAlbumRegular options: nil];
// Percorre a matriz do álbum, se o álbum foi criado
para (PHAssetCollection * assetCollection in result) {
if ([assetCollection.localizedTitle isEqualToString: albumTitle]) {
return assetCollection;
}
}
return nil;
}
#pragma mark-Como salvar fotos
- (vazio) savePhoto
{
// Modifique o álbum de fotos do sistema com o grão único do PHPhotoLibrary, chame performChanges, caso contrário, a Apple relatará um erro e lembrará você de usar
[[PHPhotoLibrary sharedPhotoLibrary] performChanges: ^ {
// Chame para determinar se existe um álbum com este nome
PHAssetCollection * assetCollection = [self fetchAssetColletion:
@ "百 思"];
// Crie um objeto para manipular a galeria
PHAssetCollectionChangeRequest * assetCollectionChangeRequest;
if (assetCollection) {
// Já tenho um álbum
assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection: assetCollection];
} outro {
// 1. Crie um álbum de fotos personalizado
assetCollectionChangeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle: @ "百 思"];
}
// 2. Salve as imagens que você precisa salvar no álbum do sistema (as que são salvas aqui são as imagens em _imageView)
PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage: _imageView.image];
// 3. Adicione a imagem criada ao seu álbum de fotos
// A imagem de espaço reservado é usada aqui, por que usar imagem de espaço reservado
// Este bloco é executado de forma assíncrona. Use a imagem de espaço reservado para alocar uma memória para a imagem primeiro e depois atribua um valor à memória quando houver uma imagem.
PHObjectPlaceholder * placeholder = [assetChangeRequest placeholderForCreatedAsset];
[assetCollectionChangeRequest addAssets: @ [placeholder]];
} completeHandler: ^ (BOOL sucesso, NSError * _Erro anulável) {
// Uma interface pop-up lembra ao usuário se o salvamento foi bem sucedido
if (erro) {
// [SVProgressHUD showErrorWithStatus: @ "Falha ao salvar"];
} outro {
// [SVProgressHUD showSuccessWithStatus: @ "Salvar com sucesso"];
}
}];
}