2013年1月4日 星期五

UIImagePickerController的使用(二)

延續前一篇,對於iPad來說,photolibrary的讀取,需要使用popover的方式,如果沿用iphone的方式,則會當掉。以下是實作方法。

1. 開啓一個新的專案


2. 在storyboard上置入一個imageView及三個Button

3.在mainViewController.h註冊imageView並加入所需變數
#import <UIKit/UIKit.h>

@interface mainViewController : UIViewController
{
    UIImagePickerController *ipc;
   
    UIPopoverController  *popover;

}

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end


4. 在mainViewController.m加入所需程式碼
#import "mainViewController.h"

@interface mainViewController ()

@end

@implementation mainViewController

@synthesize imageView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)takeCamera:(id)sender {
   
    ipc = [[UIImagePickerController alloc] init];
    [ipc setDelegate:self];
    [ipc setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:ipc animated:YES completion:^{}];
   
}
- (IBAction)openPhotoLibrary:(id)sender {
   
    UIView *anchor = sender;
       
    UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypePhotoLibrary]) {
       
        m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        m_imagePicker.delegate = self;
        [m_imagePicker setAllowsEditing:YES]; // 圖片出現可編輯的選項
       
        popover = [[UIPopoverController alloc] initWithContentViewController:m_imagePicker];
       
        [popover setPopoverContentSize:CGSizeMake(300, 300)];
       
        [popover presentPopoverFromRect:anchor.frame inView:anchor.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
       
    }

}
- (IBAction)openPhotoAlbum:(id)sender {
   
    UIView *anchor = sender;
    UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
       
        m_imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        m_imagePicker.delegate = self;
        [m_imagePicker setAllowsEditing:NO];
       
        popover = [[UIPopoverController alloc] initWithContentViewController:m_imagePicker];
       
        [popover setPopoverContentSize:CGSizeMake(300, 300)];
       
        [popover presentPopoverFromRect:anchor.frame inView:anchor.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
       
    }

   
}

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    [imageView setImage:image];
   
    [self dismissViewControllerAnimated:YES completion:nil];
}


@end

5. 執行結果,可在模擬器上執行,但建議上真機測試較佳。

另外如果增加[m_imagePicker setAllowsEditing:YES]; // 圖片出現可編輯的選項
 

沒有留言: