LoginSignup
0
0

More than 5 years have passed since last update.

UIImagePickerControllerをStoryBoardで表現することがiOS8で出来なくなった。

Last updated at Posted at 2015-09-16

前置き

来週にはiOS9も来るというのに、いまさらながら気づいた問題があったので備忘録です。
間違った内容があったら、ご指摘してください。

iOS7まではStoryBoard上でUIImagePickerControllerを指定することが可能でした。
UIViewControllerを配置して、インスペクター上のCustom ClassでUIImagePickerControllerを指定することで簡単に遷移状態を表現することが可能でした。
UIImagePickerControllerはサブクラス作れないので、細かい設定は呼び出し元のprepareForSegueで指定する必要があったりはするんですが。

ところがiOS8からはUIImagePickerControllerはNSOperationQueue内でpresentViewController等コールする必要ができた。
しかし、通常のStoryBoardのsegueでは表示方法はStoryBoard任せになるので、NSOperationQueue内に記述することができない。

いろいろ検討してみる余地はあるんですが、一番コスト低いのは結局UIImagePickerControllerの呼び出しを無理にStoryBoardで表現せずにハードコーディングすることでした。

実装

- (void)doImagePickerController
{
  UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
  imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  imagePicker.allowsEditing = NO;
  imagePicker.delegate = self;

  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self presentViewController:imagePicker animated:YES completion:nil];
  }];
}

#pragma mark <UIImagePickerControllerDelegate>

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
  [self dismissViewControllerAnimated:YES completion:nil];
  //TODO:

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
  [self dismissViewControllerAnimated:YES completion:nil];
}

検討

カスタムSegueを実装してみることも考えたんですが、ハードコーディングすれば上記のコード量で済むので、おそらくこれが最小コストだろうということで辞めました。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0