UIImagePickerController よもやま話

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    UIImagePickerController よもやま話 - Presentation Transcript

    1. UIImagePickerController よもやま話 http://www.spookies.co.jp 草苅 景 [email_address]
    2. はじめに
    3. UIImagePickerController とは
      • iPhone で、 Camera で写真を撮ったり、 Photo Library から写真を選択するためのクラス。
      • 非常に簡単に利用できる。
      • iPhone SDK が提供している、 Camera を使うための公式な唯一の手段。
    4. 実際の ソースコード
    5. @interface CameraViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { UIImagePickerController* cameraController; } @property (nonatomic, assign) UIImagePickerController* cameraController; @end
    6. #define SOURCETYPE UIImagePickerControllerSourceTypeCamera (省略) if(![UIImagePickerController isSourceTypeAvailable:SOURCETYPE]){ return; } cameraController = [[[UIImagePickerController alloc] init] retain]; cameraController.sourceType = SOURCETYPE; cameraController.delegate = self; cameraController.allowsImageEditing = NO; [self.view.superview addSubview:cameraController.view]; //[self presentModalViewController:cameraController animated:YES];
    7. UIImagePickerControllerSourceType
    8. UIImagePickerControllerSourceType
      • UIImagePickerControllerSourceTypeCamera
        • Camera で撮影。
      • UIImagePickerControllerSourceTypePhotoLibrary
        • Photo Library から画像選択。
      • UIImagePickerControllerSourceTypeSavedPhotosAlbum
        • SavedPhotoAlbum から画像選択。
    9. Photo Library Saved Photo Album
    10. Camera
    11. UIImagePickerControllerDelegate
    12. -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo; { [picker release]; // 写真選択時の処理 } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker release]; // キャンセル時の処理 }
    13. UIImagePickerController に茶茶を入れる
    14. allowsImageEditing =NO
    15. 画像編集しない場合
      • UINavigationControllerDelegate を実装。
      • Camera, PhotoLibrary 共に表示をいじれる。
      - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { // 画面カスタマイズコード }
    16. ToyCamera っぽい カメラインターフェース を実現
    17. ここを消したい
    18. for (UIView* view in currentView.subviews) { NSLog(@&quot;view is a %@&quot;, [view description]); } ひたすら掘ります
    19. その結果
    20. - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { UIView* cameraView = [viewController.view.subviews objectAtIndex:0]; UIView* cropOverlay = [cameraView.subviews objectAtIndex:3]; UIView* imgView = [cropOverlay.subviews objectAtIndex:0]; UIView* lcdLayer = [cropOverlay.subviews objectAtIndex:1]; [imgView setHidden: YES]; [lcdLayer setHidden: YES]; }
    21. allowsImageEditing = YES
    22. こんな感じで 表示したい
    23. いろいろやり方を考えた
      • なんとか allowsImageEditing 画面起動をハンドリングしたい。
        • 方法を発見できず。
      • PhotoLibrary 全体に View を載せて、自前判定。
        • キャンセルが押されたとき、スクロールされた場合などの処理が複雑。
      • PhotoLibrary の Photo 上に同じ大きさの透明な View を載せる。
        • Photo 1 つずつのオブジェクトまで辿りつけなかった。
    24. 最終的に行き着いたやり方
    25. View の時間監視
    26. (省略) [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkView) userInfo:nil repeats:YES]; touchView = [[MyTouchView alloc] init]; touchView.frame = CGRectMake(0, 0, 320, 480); touchView.backgroundColor = [UIColor blueColor]; touchView.opaque = YES; touchView.alpha = 0.5; touchView.cameraviewcontroller = self; [self.view.superview addSubview:touchView]; [self.view.superview sendSubviewToBack:touchView]; }
    27. - (void)checkView { UIView* temp; [touchView.superview sendSubviewToBack:touchView]; if ((temp = [self getViewFromArray:self.view.superview.subviews num:2]) != nil) { if((temp = [self getViewFromArray:temp.subviews num:0]) != nil) { if((temp = [self getViewFromArray:temp.subviews num:1]) != nil) { if(([[temp description] length] > 15) && ([[[temp description] substringToIndex:15] isEqualToString:@&quot;<PLCropOverlay:&quot;])) { [touchView.superview bringSubviewToFront:touchView]; } } } } }
    28. - (UIView *)getViewFromArray:(NSArray*)viewArray num:(int)i { if([viewArray count] <= i) return nil; return [viewArray objectAtIndex:i]; }
    29. 最後に
    30. 非公開 API を使えばもう少しいろいろできるみたいです。 興味がある方はそちらも調べてみて下さい。
    31. ご静聴ありがとうございました!

    + kusakarikusakari, 2 years ago

    custom

    5473 views, 2 favs, 1 embeds more stats

    「iPhone勉強会 at 京都」2008年12月13日の more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 5473
      • 5273 on SlideShare
      • 200 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 30
    Most viewed embeds
    • 200 views on http://d.hatena.ne.jp

    more

    All embeds
    • 200 views on http://d.hatena.ne.jp

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories