Включение кнопки библиотеки фотографий на UIImagePickerController - PullRequest
18 голосов
/ 16 декабря 2011

Кто-нибудь знает, как включить кнопку фотоальбома на UIImagePickerController, когда он находится в режиме камеры? Например, как приложение камеры на iphone может переключаться между съемкой изображений и видео, а также имеет кнопку для просмотра библиотеки фотографий?

Ответы [ 5 ]

14 голосов
/ 12 июня 2012

Это можно сделать с помощью следующих строк:

- (void) navigationController: (UINavigationController *) navigationController  willShowViewController: (UIViewController *) viewController animated: (BOOL) animated {
    if (imagePickerController.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(showCamera:)];
        viewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObject:button];
    } else {
        UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithTitle:@"Library" style:UIBarButtonItemStylePlain target:self action:@selector(showLibrary:)];
        viewController.navigationItem.leftBarButtonItems = [NSArray arrayWithObject:button];
        viewController.navigationItem.title = @"Take Photo";
        viewController.navigationController.navigationBarHidden = NO; // important
    }
}

- (void) showCamera: (id) sender {
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
}

- (void) showLibrary: (id) sender {
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
7 голосов
/ 16 декабря 2011

Боюсь, что это невозможно сделать таким простым способом (просто включите или отключите какую-нибудь магическую функцию).Для некоторых простых требований вы можете использовать cameraOverlayView и showsCameraControls для реализации.

Если вы хотите переключаться между режимами фото / видео, я думаю, вы можете проверитьэто демо: http://developer.apple.com/library/ios/#samplecode/AVCam/Introduction/Intro.html

3 голосов
/ 15 августа 2012

Вот пример приложения и очень простая библиотека, которая позволяет вам делать фотографии или выбирать из библиотеки, как это делает Facebook.https://github.com/fulldecent/FDTake

1 голос
/ 26 декабря 2015

Swift2 версия кода @epsilontik:

    //mediaPicker is your UIImagePickerController
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    if(mediaPicker.sourceType == UIImagePickerControllerSourceType.PhotoLibrary){
        let button = UIBarButtonItem(title: "Take picture", style: UIBarButtonItemStyle.Plain, target: self, action: "showCamera")
        viewController.navigationItem.rightBarButtonItem = button
    }else{
        let button = UIBarButtonItem(title: "Choose picture", style: UIBarButtonItemStyle.Plain, target: self, action: "choosePicture")
        viewController.navigationItem.rightBarButtonItem = button
        viewController.navigationController?.navigationBarHidden = false
        viewController.navigationController?.navigationBar.translucent = true
    }
}

func showCamera(){
    mediaPicker.sourceType = UIImagePickerControllerSourceType.Camera
}

func choosePicture(){
    mediaPicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
}
1 голос
/ 18 января 2013

Я сделал этот пример приложения Apple PhotoPicker.Я удалил все элементы управления камерой и добавил свою собственную кнопку.При щелчке для UIImagePickerControllerSourceType устанавливается значение UIImagePickerControllerSourceTypePhotoLibrary.

Сложной для меня частью было «отклонение» (может быть, технически неправильное слово) библиотеки фотографий после выбора изображения.Я сделал это, установив тип источника обратно в UIImagePickerControllerSourceTypeCamera.Это возвращает вид наложения камеры.

ViewController.h

#import <UIKit/UIKit.h>
#import <CoreGraphics/CoreGraphics.h>
#import <ImageIO/ImageIO.h>


@interface ViewController : UIViewController <UIImagePickerControllerDelegate> {

//

}

@property (nonatomic, strong) UIImagePickerController *imagePicker;
- (IBAction)uploadNewPhotoTapped:(id)sender;
@end


ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

 //Other code

- (IBAction)uploadNewPhotoTapped:(id)sender {

    UIImagePickerController *imagePickController=[[UIImagePickerController alloc]init];
    //You can use isSourceTypeAvailable to check

    if ([UIImagePickerController    isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        imagePickController.sourceType=UIImagePickerControllerSourceTypeCamera;
        imagePickController.showsCameraControls=YES;
        //  self.usingPopover = NO;
    }
    else if ([UIImagePickerController  isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {//Check PhotoLibrary  available or not
        imagePickController.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
        imagePickController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }
    else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) //Check front Camera available or not
        imagePickController.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    //else //!!!!!!!!!!!exception

    imagePickController.delegate=self;
    imagePickController.allowsEditing=NO;

    [self presentModalViewController:imagePickController animated:YES];
}


- (void)imagePickerController:(UIImagePickerController *)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *originalImage=[info objectForKey:UIImagePickerControllerOriginalImage];

    //Do whatever with your image   
    NSData *data = UIImageJPEGRepresentation (
                                          originalImage,
                                          1.0
                                          );

    [self dismissModalViewControllerAnimated:YES];
}

   // Other code
   @end
...