思い立ったが吉日!

iOSが好きです。

QBImagePickerControllerを使うときに見たPHAsset

QBImagePickerController

QBImagePickerControllerを使うと標準のUIImagePickerControllerでは画像を一枚ずつしか選択できなかったのが、複数選択が可能になります。 f:id:watarotten:20151029143621p:plain

https://github.com/questbeat/QBImagePicker

QBImagePickerControllerのREAD.MEを読むと

画像が選択さてた時に呼ばれるdelegate method

- (void)qb_imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingAssets:(NSArray *)assets {
    // ここで選択した画像のリストはNSArrayでとれるらしい
    for (PHAsset* asset in assets) {
        // Do something with the asset

    }
    [self dismissViewControllerAnimated:YES completion:nil];
}

// Do something with the asset? UIImageではないらしい...

PHAssetをキャストしてUIImageに変換すると、コンパイルは通るものの実行時に変換できずに落ちました。

PHAssetとはなんぞやと思い、調べると

A PHAsset object represents an image or video file that appears in the Photos app, including iCloud Photos content.

とある。 ...写真とビデオファイルを扱うらしい。 んで、PHAssetだけでは、実際のimageをとってる訳ではないっぽい。 PHAssetを元にfetchする的なことが書いてある。

取ってくるにはPHImageManagerのrequestImageForAssetメソッドにPHAssetを渡すことでimageファイルが取れてくるようだ。

PHImageManager* manager = [PHImageManager new];
[manager requestImageForAsset:asset targetSize:CGSizeMake(70, 70) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
       // errorなければresultがUIImage
}];

これで取れてきます。

ただ、targetSizeが70×70になっているので、通常の写真を使う場合は超荒くなるので、コピって使う際は調整してください。