web-dev-qa-db-ja.com

画像の保存に使用するPHAssetCollectionはどれですか?

IOS 8のPhotos.frameworkでは、Safariで画像を長押しして[画像を保存]を選択するのとほぼ同じ方法で、UIImageをユーザーの写真ライブラリに保存しようとしています。 iOS 7では、これはALAssetLibraryのwriteImageToSavedPhotosAlbum:metadata:completionBlockを呼び出すだけです。

IOS 8の場合、PHAssetを追加するアセットコレクションを選択する必要がありますが、ユーザーの「カメラロール」に保存するのに最も近いPHAssetCollectionを特定できません(iOSには実際にはありませんが) 8)

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *newAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
    newAssetRequest.creationDate = time;
    newAssetRequest.location = location;

    PHObjectPlaceholder *placeholderAsset = newAssetRequest.placeholderForCreatedAsset;

    PHAssetCollectionChangeRequest *addAssetRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:WHICH_ASSET_COLLECTION];
    addAssetRequest addAssets:@[placeholderAsset];

} completionHandler:^(BOOL success, NSError *error) {
    NSLog(@"Success: %d", success);
}];

「最近追加された」スマートアルバムにアクセスしようとしましたが、新しいコンテンツを追加できません。

17
Rizwan Sattar

PHAssetCollectionをいじくり回す必要はありません。次のようにして追加するだけです。

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:<#your photo here#>];
    } completionHandler:^(BOOL success, NSError *error) {
        if (success) {
            <#your completion code here#>
        }
        else {
            <#figure out what went wrong#>
        }
    }];
29

実際、8.1ではカメラロールが復活しました。これは、サブタイプがSmartAlbumUserLibraryであるスマートアルバムです。

6
matt