iOS写真アプリによくある画像の切り取りViewを作ってみた
Instagramなどの写真系アプリで、ギャラリーで写真を選択した後出てくる枠にはめ込んでトリミングするビューを作ってみました。
それ、UIKitでできるよ
UIImagePickerControllerを使うと、インスタンスのプロパティを設定するだけでギャラリーで画像を選択したあと、UIKitで用意されている切り取り画面に遷移します。
void showPicker { UIImagePickerController *controller = [[UIImagePickerController alloc] init]; controller.allowsEditing = YES; [self.navigationController pushViewController:controller animated:YES]; }
ただし、Pickerを使わずカメラロール以外のソースから画像を読み込みたいときなどは、独自のクラスで処理をしてあげないといけません。
作ってみた
ということでカスタムクラスを1から書いてみました。ソースはhorimislime/iTrimmingView · GitHubより。 呼び出しは以下のような感じです。
// TrimmingViewControllerDelegateを実装したクラス内 - (void) showPicker { // 呼び出し側のViewController内 TrimmingViewController *trimmingViewController = [[TrimmingViewController alloc] initWithNibName:@"TrimmingViewController" bundle:nil]; // 切り取りたい画像のUIImage trimmingViewController.image = [UIImage imageNamed:@"hogehoge.png"]; //切り取りボタンが押された際に呼ばれるDelegate trimmingViewController.delegate = self; [self pushViewController:trimmingViewController animated:YES]; } - (void) trimmingController: (TrimmingViewController *) sender finished: (UIImage *) image { // 切り取った画像の処理... }
Pickerと同じように、呼び出し側でDelegateを実装しておき切り取ったUIImageを受け取ります。Pickerを使わないアプリに組み込みたいとき以外にも、切り取り画面の見た目をこまかく弄りたいときにも使えそう。