2011-12-16 38 views
18

Có ai biết cách bật nút album ảnh trên UIImagePickerController khi nó ở chế độ máy ảnh không? Giống như cách ứng dụng máy ảnh trên iphone có thể chuyển đổi giữa chụp ảnh và quay video và cũng có nút để xem thư viện ảnh?Bật nút thư viện ảnh trên UIImagePickerController

Trả lời

7

Tôi e rằng điều này không thể thực hiện được theo cách dễ dàng đó (chỉ cần bật hoặc tắt một số tính năng ma thuật). Đối với một số yêu cầu đơn giản, bạn có thể sử dụng cameraOverlayViewshowsCameraControls để thực hiện.

Nếu bạn muốn chuyển đổi giữa các chế độ hình ảnh/video, tôi nghĩ rằng bạn có thể kiểm tra bản demo này: http://developer.apple.com/library/ios/#samplecode/AVCam/Introduction/Intro.html

+0

ah ok. cảm ơn!! – MBU

14

này có thể được thực hiện thông qua các dòng sau:

- (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

Điều này sẽ không thay đổi điều khiển camera, nhưng thay vào đó hãy thêm thanh điều hướng vào phần trên cùng của cửa sổ camera. Điều đó có thể hoặc có thể không phải là những gì bạn muốn, nhưng tôi không nghĩ rằng đó là những gì OP đã có trong tâm trí. – DaGaMs

+2

giải pháp tuyệt vời. Chỉ cần nhớ kiểm tra xem nguồn camera thực sự có sẵn hay không. Một cái gì đó như: nếu ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { self.picker.sourceType = UIImagePickerControllerSourceTypeCamera; } – EsbenB

3

Dưới đây là một ứng dụng ví dụ và thư viện rất đơn giản cho phép bạn lấy Take Photo hoặc Choose from Library giống như Facebook. https://github.com/fulldecent/FDTake

1

Tôi đã thực hiện điều chỉnh ứng dụng ví dụ PhotoPicker của Apple. Tôi đã xóa tất cả các điều khiển của máy ảnh và thêm nút của riêng tôi. Khi được nhấp, UIImagePickerControllerSourceType được đặt thành UIImagePickerControllerSourceTypePhotoLibrary.

Phần khó khăn đối với tôi là "loại bỏ" (có thể là từ sai về mặt kỹ thuật) Thư viện ảnh sau khi đã chọn hình ảnh. Tôi đã làm điều này bằng cách thiết lập các loại nguồn trở lại UIImagePickerControllerSourceTypeCamera. Điều này mang lại chế độ xem lớp phủ máy ảnh.

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

Xin lỗi vì đã đánh thức một con zombie ở đây, nhưng nếu bạn vẫn còn mã, tôi sẽ thực sự quan tâm! – bdv

+0

Hi bdv. Tôi thực sự đào mã của tôi và đăng nó lên câu trả lời ban đầu của tôi. Tôi không nhớ chính xác làm thế nào tôi đã làm nó như tôi đã không làm việc trên ứng dụng này trong 2 năm nhưng tôi bắt đầu với ứng dụng PhotoPicker gốc của Apple. https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html – ganime

1

Swift2 phiên bản mã @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 
} 
Các vấn đề liên quan