如何在呈现UIImagePickerController时创建GalleryShortcut

时间:2015-02-09 15:05:35

标签: ios objective-c uiimagepickercontroller image-gallery

我想让用户选择拍照或在我的应用中上传一个作为他的头像。 我相信没有必要为它设置两个不同的按钮,所以我想做下一个场景:

用户点击“添加图片”按钮并自动使用源代码控制UIImagePicker - 提供相机。 但是,我希望在角落里有画廊的快捷方式,用户可以点击,进入图库并搜索他将使用的图片。

以下是我需要的屏幕截图: enter image description here

红圈的一部分是重要的部分。 我怎么把它放在那里?

(最初它不存在)

1 个答案:

答案 0 :(得分:1)

没有预制方法可以做到这一点。 您可以做的是为Camera View制作叠加层。 请记住,您必须为每个设备制作不同的视图,因为每个设备在CameraView中已经有不同的定位。

一个例子是:

- (IBAction)addImage:(UIButton *)sender {

    UIView* overlay = [[UIView alloc] initWithFrame:CGRectMake(20,self.view.frame.size.height-60 , 40, 40)];

    overlay.opaque=NO;

    overlay.backgroundColor = [UIColor clearColor];



    UIButton* btnGallery = [[UIButton alloc]initWithFrame:CGRectMake(0,0 , 40, 40)];

    [btnGallery setImage:[UIImage imageNamed:@"image_gallery"] forState:UIControlStateNormal];

    btnGallery.backgroundColor = [UIColor whiteColor];





    [overlay addSubview:btnGallery];



    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    imagePicker.delegate = self;

    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

    imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];

    imagePicker.allowsEditing = YES;

    [imagePicker.view addSubview:overlay];



    [btnGallery addTarget:self

                   action:@selector(openGallery)

         forControlEvents:UIControlEventTouchUpInside];



    _picker = imagePicker;



    [self presentViewController:imagePicker

                       animated:YES

                     completion:nil];

}





-(void)openGallery

{
    UIImagePickerController *gallery =    [[UIImagePickerController alloc] init];

    gallery.delegate = self;

    gallery.sourceType =    UIImagePickerControllerSourceTypePhotoLibrary;

    gallery.mediaTypes = @[(NSString *) kUTTypeImage];

    gallery.allowsEditing = YES;

    _gallery = gallery;

    [_picker presentViewController:gallery

                          animated:YES

                        completion:nil];

}