2011-12-16 3 views
18

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

ответ

7

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

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

+0

ах ок. благодаря!! – MBU

14

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

- (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; 
} 
+2

Это не изменит управление камерой, а добавит навигационную панель в верхнюю часть окна камеры. Это может быть или не быть тем, чего вы хотите, но я не думаю, что это то, что имел в виду OP. – DaGaMs

+2

отличное решение. Не забудьте проверить, действительно ли источник камеры доступен. Что-то вроде: if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { self.picker.sourceType = UIImagePickerControllerSourceTypeCamera; } – EsbenB

3

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

1

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

Сложная часть для меня была «увольнением» (может быть, технически неправильным словом), Photo Library после того, как изображение было выбрано. Я сделал это, установив тип источника обратно в 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 
+0

Извините, что проснулся здесь зомби, но если у вас все еще есть код, мне было бы очень интересно! – bdv

+0

Hi bdv. Я действительно выкопал свой код и отправил его в свой первоначальный ответ. Я не помню точно, как я это сделал, так как я не работал над этим приложением через 2 года, но начал с оригинального приложения Apple PhotoPicker от Apple. https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html – ganime

1

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 
} 
Смежные вопросы