takePic and Videos
2019独角兽企业重金招聘Python工程师标准>>>
//
// ViewController.m
// UIImagePickerController
// Created by Kenshin Cui on 14/04/05.
// Copyright (c) 2014年 cmjstudio. All rights reserved.
//AVFoundation.framework
//MediaPlayer.framework
//MobileCoreSevices.framework
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (assign,nonatomic) int isVideo;//是否录制视频,如果为1表示录制视频,0代表拍照
@property (strong,nonatomic) UIImagePickerController *imagePicker;
@property (weak, nonatomic) IBOutlet UIImageView *photo;//照片展示视图
@property (strong ,nonatomic) AVPlayer *player;//播放器,用于录制完视频后播放视频
@end
@implementation ViewController
#pragma mark - 控制器视图事件
- (void)viewDidLoad {
[super viewDidLoad];
//通过这里设置时拍照还是录制视频
_isVideo=YES;
}
#pragma mark - UI事件
//点击拍照按钮
- (IBAction)takeClick:(UIButton *)sender {
[self presentViewController:self.imagePicker animated:YES completion:nil];
}
#pragma mark - UIImagePickerController代理方法
//完成
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//如果时拍照
UIImage *image;
//如果允许编辑则获得编辑后的照片,否则获取原始照片
if (self.imagePicker.allowsEditing) {
image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片
}else{
image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
}
[self.photo setImage:image];//显示照片
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);//保存到相簿
}else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频
NSLog(@"video...");
NSURL *url=[info objectForKey:UIImagePickerControllerMediaURL];//视频路径
NSString *urlStr=[url path];
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
//保存视频到相簿,注意也可以使用ALAssetsLibrary来保存
UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//保存视频到相簿
}
}
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"取消");
}
#pragma mark - 私有方法
-(UIImagePickerController *)imagePicker{
if (!_imagePicker) {
_imagePicker=[[UIImagePickerController alloc]init];
_imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image picker的来源,这里设置为摄像头
_imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头
if (self.isVideo) {
_imagePicker.mediaTypes=@[(NSString *)kUTTypeMovie];
_imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)
}else{
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
}
_imagePicker.allowsEditing=YES;//允许编辑
_imagePicker.delegate=self;//设置代理,检测操作
}
return _imagePicker;
}
//视频保存后的回调
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
if (error) {
NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
}else{
NSLog(@"视频保存成功.");
//录制完之后自动播放
NSURL *url=[NSURL fileURLWithPath:videoPath];
_player=[AVPlayer playerWithURL:url];
AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
playerLayer.frame=self.photo.frame;
[self.photo.layer addSublayer:playerLayer];
[_player play];
}
}
@end
转载于:https://my.oschina.net/BurningOC/blog/523294
takePic and Videos相关推荐
- 视频分割--Learning to Segment Instances in Videos with Spatial Propagation Network
Learning to Segment Instances in Videos with Spatial Propagation Network CVPRW2017 https://github.co ...
- 人群密度估计--Spatiotemporal Modeling for Crowd Counting in Videos
Spatiotemporal Modeling for Crowd Counting in Videos ICCV2017 针对视频人群密度估计问题,这里主要侧重视频中的 temporal infor ...
- 视频动作识别--Two-Stream Convolutional Networks for Action Recognition in Videos
Two-Stream Convolutional Networks for Action Recognition in Videos NIPS2014 http://www.robots.ox.ac. ...
- 视频中的运动特征--Learning Motion Patterns in Videos
Learning Motion Patterns in Videos CVPR2017 Torch code: http://thoth.inrialpes.fr/research/mpnet 本文要 ...
- 201904:Action recognition based on 2D skeletons extracted from RGB videos
论文标题:Action recognition based on 2D skeletons extracted from RGB videos 发表时间:02 April 2019 解决问题/主要思想 ...
- opencv-Getting Started with Videos
1.opencv库简单操作视频 # coding = utf-8 # Getting Started with Videos import cv2 import numpy as np # 创建捕获视 ...
- fedora30删除 gnome自带的Videos软件
gnome3自带的Videos粗看感觉听简洁挺流畅的,可是细看不仅电影中文名乱码显示还搞得字幕慢半拍,这一点完全不能忍,太难受了. 还是Vlc牛.而且Videos在应用商店不能卸载,命令行搜索已安装软 ...
- Pexels Videos – 可以免费商业使用的短视频
Pexels 是一个巨大的平台,提供免费的精美照片,很多设计师和博客每天用它来寻找他们的个人和商业项目的照片.现在我们想介绍 Pexels 视频,他是用来帮助你找到免费的视频.所有的 Pexels 视 ...
- DanmuVis: Visualizing Danmu Content Dynamics and AssociatedViewer Behaviors in Online Videos
目录 作者:北京大学可视化与可视分析研究小组,一作陈帅 发表:EuroVis2022 一.弹幕数据的优势与特点 二.本文的切入点 三.工作难点 四.本文解决方案:DanmuVis系统 系统包含数据处理 ...
最新文章
- C# Levenshtein计算字符串的相似度
- linux内核pwn,[内核pwn] 环境搭建
- Coursera课程Python for everyone:Quiz: Multi-Table Relational SQL
- javese 5 中的枚举类及单例模式
- 【MySql】 BlackHole :黑洞引擎
- 基于Python语言使用RabbitMQ消息队列(一)
- P2280 [HNOI2003]激光炸弹
- angularjs控制器之间的数据共享与通信
- SCCM报表点和SQL Server的报表服务集成, 随心所欲创建报表?
- 嵌入式组态软件HMImaker(绿色版人机界面组态软件)
- Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程
- widnows监控linux 内存,在windows下监控linux的cpu和内存
- 计算机专业学习目标计划怎么写,制定计算机学习计划范文3篇
- 彩虹网盘外链程序源码V5.1|网盘外链源码
- c语言杖举,形近字组词。直()植()杖()仗()提()题()漫()慢()
- 高三学习计划作文计算机专业,高三学习计划作文.docx
- Zepeto正加速摆脱“捏脸”应用的传统印象,成为亚洲最大虚拟世界平台
- 神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup
- Unity检测IOS刘海屏
- Python——from collections import namedtuple
热门文章
- c++怎么将文件中的数据读出并赋值给字符串_web前端开发过程中如何写JavaScript程序?...
- 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)
- 聊聊同步、异步、阻塞与非阻塞
- MySQL提高插入数据的效率(结合JDBC)
- 你必须知道的CSS盒模型,面试建议
- kafka 重新分配节点_Kafka控制器-分区重分配
- Python实现三级菜单(字典和列表的使用)
- Ubuntu 18.04 下如何配置mysql 及 配置远程连接
- django开发商城(提供初始数据,商城首页及购物车)
- 51nod 1100:斜率最大