UIImagePickerController拍照和錄像

打開(kāi)攝像頭顯示中文躏升,可在Info.plist添加Localizations(array)字段,添加Chinese (simplified)

// 
//  ViewController.m
//  TestVideoAndPicture
// 
//  Created by albert on 2017/4/14.
//  Copyright ? 2017年 albert. All rights reserved.
// 

#import "ViewController.h"

#import <AssetsLibrary/AssetsLibrary.h>

#import <MobileCoreServices/MobileCoreServices.h>

@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
@property (weak, nonatomic) IBOutlet UIButton *testGestureButton;
@property (weak, nonatomic) IBOutlet UIImageView *testImageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

// 選擇相冊(cè)中視頻和照片
- (IBAction)videos:(id)sender {
    // 檢查相冊(cè)是否可用
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        
        NSLog(@"sorry, no camera or camera is unavailable.");
        
        return;
    }
    
    // 創(chuàng)建圖像選取控制器
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    
    // 設(shè)置圖像選取控制器的來(lái)源模式為PhotoLibrary
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    
    // 設(shè)置圖像選取控制器的類型為視頻和照片
    imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeMovie, (NSString*)kUTTypeImage, nil];
    
    // 允許用戶進(jìn)行編輯
    imagePickerController.allowsEditing = YES;
    
    // 設(shè)置委托對(duì)象
    imagePickerController.delegate = self;
    
    // 以模視圖控制器的形式顯示
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

// 拍照
- (IBAction)takePictureButtonClick:(id)sender{
    
    // 檢查相機(jī)模式是否可用
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        
        NSLog(@"sorry, no camera or camera is unavailable.");
        
        return;
    }
    
    // 獲得相機(jī)模式下支持的媒體類型
    NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    
    BOOL canTakePicture = NO;
    
    for (NSString *mediaType in availableMediaTypes) {
        
        if ([mediaType isEqualToString:(NSString*)kUTTypeImage]) {
            
            // 支持拍照
            canTakePicture = YES;
            
            break;
        }
    }
    
    // 檢查是否支持拍照
    if (!canTakePicture) {
        
        NSLog(@"sorry, taking picture is not supported.");
        
        return;
    }
    
    // 創(chuàng)建圖像選取控制器
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    
    // 設(shè)置圖像選取控制器的來(lái)源模式為相機(jī)模式
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    
    // 設(shè)置圖像選取控制器的類型為靜態(tài)圖像
    imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil];
    
    // 允許用戶進(jìn)行編輯
    imagePickerController.allowsEditing = YES;
    
    // 設(shè)置委托對(duì)象
    imagePickerController.delegate = self;
    
    // 以模視圖控制器的形式顯示
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

// 錄像
- (IBAction)captureVideoButtonClick:(id)sender{
    
    // 檢查相機(jī)模式是否可用
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        
        NSLog(@"sorry, no camera or camera is unavailable!!!");
        
        return;
    }
    
    // 獲得相機(jī)模式下支持的媒體類型
    NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    
    BOOL canTakeVideo = NO;
    
    for (NSString *mediaType in availableMediaTypes) {
        
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
            
            // 支持?jǐn)z像
            canTakeVideo = YES;
            
            break;
        }
    }
    
    // 檢查是否支持?jǐn)z像
    if (!canTakeVideo) {
        
        NSLog(@"sorry, capturing video is not supported!!!");
        
        return;
    }
    
    // 創(chuàng)建圖像選取控制器
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    
    // 設(shè)置圖像選取控制器的來(lái)源模式為相機(jī)模式
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    
    // 設(shè)置圖像選取控制器的類型為動(dòng)態(tài)圖像
    imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    // 設(shè)置攝像圖像品質(zhì)
    imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;
    
    // 設(shè)置最長(zhǎng)攝像時(shí)間
    imagePickerController.videoMaximumDuration = 30;
    
    // 允許用戶進(jìn)行編輯
    imagePickerController.allowsEditing = YES;
    
    // 設(shè)置委托對(duì)象
    imagePickerController.delegate = self;
    
    // 以模式視圖控制器的形式顯示
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

- (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo{
    
    if (!error) {
        
        NSLog(@"picture saved with no error.");
        
    }else{
        
        NSLog(@"error occured while saving the picture%@", error);
        
    }
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    
    // 打印出字典中的內(nèi)容
    NSLog(@"get the media info: %@", info);
    
    // 獲取媒體類型
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    
    // 判斷是靜態(tài)圖像還是視頻
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // 圖片
        
        // 獲取用戶編輯之后的圖像
        UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
        
        // 將該圖像保存到媒體庫(kù)中
        UIImageWriteToSavedPhotosAlbum(editedImage, self,@selector(image:didFinishSavingWithError:contextInfo:), NULL);
        
    }else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // 視頻
        
        // 獲取視頻文件的url
        NSURL *mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
        
        // 創(chuàng)建ALAssetsLibrary對(duì)象并將視頻保存到媒體庫(kù)
        ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
        
        [assetsLibrary writeVideoAtPathToSavedPhotosAlbum:mediaURL completionBlock:^(NSURL *assetURL, NSError *error) {
            if (!error) {
                
                NSLog(@"captured video saved with no error.");
                
            }else{
                
                NSLog(@"error occured while saving the video:%@", error);
                
            }
        }];
    }
    
    [picker dismissViewControllerAnimated:YES completion:nil];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    
    [picker dismissViewControllerAnimated:YES completion:nil];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

參考:http://blog.csdn.net/pucker

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狼忱,一起剝皮案震驚了整個(gè)濱河市膨疏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藕赞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卖局,死亡現(xiàn)場(chǎng)離奇詭異斧蜕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)砚偶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門批销,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人染坯,你說(shuō)我怎么就攤上這事均芽。” “怎么了单鹿?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵掀宋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仲锄,道長(zhǎng)劲妙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任儒喊,我火速辦了婚禮镣奋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怀愧。我一直安慰自己侨颈,他們只是感情好余赢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著哈垢,像睡著了一般妻柒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上温赔,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天蛤奢,我揣著相機(jī)與錄音,去河邊找鬼陶贼。 笑死啤贩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拜秧。 我是一名探鬼主播痹屹,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枉氮!你這毒婦竟也來(lái)了志衍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤聊替,失蹤者是張志新(化名)和其女友劉穎楼肪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惹悄,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡春叫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泣港。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂殖。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖当纱,靈堂內(nèi)的尸體忽然破棺而出呛每,到底是詐尸還是另有隱情,我是刑警寧澤坡氯,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布晨横,位于F島的核電站,受9級(jí)特大地震影響箫柳,放射性物質(zhì)發(fā)生泄漏颓遏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一滞时、第九天 我趴在偏房一處隱蔽的房頂上張望叁幢。 院中可真熱鬧,春花似錦坪稽、人聲如沸曼玩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黍判。三九已至豫尽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷帖,已是汗流浹背美旧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贬墩,地道東北人榴嗅。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陶舞,于是被迫代替她去往敵國(guó)和親嗽测。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容