PhotoKit でイメージピッカーを作った

iOS 8 で追加された PhotoKit (Photos.framework) を使って QBImagePickerController を作り直しました。
それと同時にリポジトリ名を変更し、QBImagePickerController は QBImagePicker となりました。
PhotoKit を使っているので、このバージョン(3.0.0)からは iOS 8 以降のみの対応となります。

ここでは新しい QBImagePicker の特徴をご紹介します。

アルバムをまたいで複数の写真やビデオが選択できる

QBImagePicker では複数の写真やビデオを選択できます。
選ぶ枚数の最大値・最小値はプロパティで設定できるようになっています。

もちろん、アルバムをまたいだ選択も可能です。
選択された写真は Local Identifier という固有の識別子で追跡されるので、別のアルバムにある同じ写真を重複して選択してしまう、ということはありません。

これは本当に PhotoKit 様様で、以前 AssetsLibrary を使っていた時はアセットの URL で追跡していて苦しい感じでした。

f:id:questbeat:20150405152653p:plain f:id:questbeat:20150405152654p:plain

主な機能は以前と変わりませんが、AssetsLibrary から PhotoKit に切り替えたことで可能になった新機能もあります。 ここからは新しい QBImagePicker の特徴を書いていきます。

複数の写真やビデオが選択できるイメージピッカーです。
iOS 標準のイメージピッカーにそっくりなインターフェースで、する機能を提供できます。

高速なスクロール

写真の一覧では PHCachingImageManager を使って画像をキャッシュ(というより先読み)しているので、スクロール方向の画像を瞬時に表示できるようになっています。
また、写真は低解像度のものが先に表示され、ロードが終わり次第高解像度の写真に差し替えられるようになっています。(PhotoKit すごい!!)

いろいろカスタマイズできる

こちらが QBImagePickerController のプロパティです。
だいたいプロパティ名でわかるかと思いますが、いろいろカスタマイズできるようになっています。

@property (nonatomic, weak) id<QBImagePickerControllerDelegate> delegate;

@property (nonatomic, copy) NSArray *assetCollectionSubtypes;
@property (nonatomic, assign) QBImagePickerMediaType mediaType;

@property (nonatomic, assign) BOOL allowsMultipleSelection;
@property (nonatomic, assign) NSUInteger minimumNumberOfSelection;
@property (nonatomic, assign) NSUInteger maximumNumberOfSelection;

@property (nonatomic, copy) NSString *prompt;
@property (nonatomic, assign) BOOL showsNumberOfSelectedAssets;

@property (nonatomic, assign) NSUInteger numberOfColumnsInPortrait;
@property (nonatomic, assign) NSUInteger numberOfColumnsInLandscape;

assetCollectionSubtypes プロパティを使えば『どのアルバムを』『どんな順番で』表示するかを設定できます。
デフォルトは以下のようになっています。

imagePickerController.assetCollectionSubtypes = @[
    @(PHAssetCollectionSubtypeSmartAlbumUserLibrary), // カメラロール
    @(PHAssetCollectionSubtypeAlbumMyPhotoStream), // 自分のフォトストリーム
    @(PHAssetCollectionSubtypeSmartAlbumPanoramas), // パノラマ
    @(PHAssetCollectionSubtypeSmartAlbumVideos), // ビデオ
    @(PHAssetCollectionSubtypeSmartAlbumBursts) // バースト
];

また、UI は Storyboard で作ってあるので、Fork して自分好みのデザインに変えたりできます。

f:id:questbeat:20150405161913p:plain

標準のピッカーにそっくり

標準のピッカーに近い見た目にしてあるので、ユーザは写真.appと同じ感覚で操作できます。

いろんな画面サイズに対応

iPhone 6/6Plus や iPad の解像度、そして画面の回転にも対応しています。


以上、QBImagePicker の紹介でした。
まだまだ iOS 7 のサポートは外せないと思いますが、iOS 8 以降のみ対応のアプリを作るときはぜひご利用ください。
なにか不具合があれば GitHub まで。