ライブラリの追加
AssetsLibrary.frameworkを追加
ライブラリをimport
# import <AssetsLibrary/AssetsLibrary.h>
呼び出し側の処理
何も考えずに以下のメソッドを実行すればアクセス許可されていない場合は許可を促すアラートが表示されます。
[self saveImageToPhotosAlbum:myImage];
フォトライブラリへの保存処理
iOS6以上に対応したソースです。
(iOS5だと落ちます)
iOS6ではフォトアルバムに画像を保存する場合はアクセス許可が必要です。
この辺の処理を入れておかないと「写真を保存できません!」とレビューに書かれてしまいます。
// 写真へのアクセスが許可されている場合はYESを返す。まだ許可するか選択されていない場合はYESを返す。
- (BOOL)isPhotoAccessEnableWithIsShowAlert:(BOOL)_isShowAlert {
// このアプリの写真への認証状態を取得する
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
BOOL isAuthorization = NO;
switch (status) {
case ALAuthorizationStatusAuthorized: // 写真へのアクセスが許可されている
isAuthorization = YES;
break;
case ALAuthorizationStatusNotDetermined: // 写真へのアクセスを許可するか選択されていない
isAuthorization = YES; // 許可されるかわからないがYESにしておく
break;
case ALAuthorizationStatusRestricted: // 設定 > 一般 > 機能制限で利用が制限されている
{
isAuthorization = NO;
if (_isShowAlert) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"エラー"
message:@"写真へのアクセスが許可されていません。\n設定 > 一般 > 機能制限で許可してください。"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
break;
case ALAuthorizationStatusDenied: // 設定 > プライバシー > 写真で利用が制限されている
{
isAuthorization = NO;
if (_isShowAlert) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"エラー"
message:@"写真へのアクセスが許可されていません。\n設定 > プライバシー > 写真で許可してください。"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
break;
default:
break;
}
return isAuthorization;
}
- (void)saveImageToPhotosAlbum:(UIImage*)_image {
BOOL isPhotoAccessEnable = [self isPhotoAccessEnableWithIsShowAlert:YES];
/////// フォトアルバムに保存 ///////
if (isPhotoAccessEnable) {
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:_image.CGImage
orientation:(ALAssetOrientation)_image.imageOrientation
completionBlock:
^(NSURL *assetURL, NSError *error){
NSLog(@"URL:%@", assetURL);
NSLog(@"error:%@", error);
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
if (status == ALAuthorizationStatusDenied) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"エラー"
message:@"写真へのアクセスが許可されていません。\n設定 > 一般 > 機能制限で許可してください。"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
} else {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@""
message:@"フォトアルバムへ保存しました。"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}];
}
}
参考
参考にさせていただきました。
確認ダイアログに独自のメッセージを追加することも可能なようです。