`
bengan
  • 浏览: 199409 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

UIVideoEditorController 使用

阅读更多
概述
不能定制界面,不可派生子类。
使用步骤:
检查制定源是否可用. isSourceTypeAvailable:方法.
检查可用媒体(视频还是只能是图片) availableMediaTypesForSourceType:方法.
设置界面媒体属性 mediaTypes property.
显示界面使用 presentViewController:animated:completion: 方法.iPad中是 popover形式. 需要确保sourceType有效.
相关操作,移除视图.
有相关代理,有闪光灯支持.
对于视频有10分钟限制,但是可以通过videoMaximumDuration属性更改。可以使用默认的或专用的 UIVideoEditorController 来编辑视频.
如果向创建一个完全自定义界面的image picker 来浏览图片, 使用  Assets Library Framework Reference中的类. (AV Foundation Programming Guide 中的  “Media Capture and Access to Camera”  )

设置源
+ availableMediaTypesForSourceType: // 指定源可用的媒体种类
+ isSourceTypeAvailable: // 指定源是否在设备上可用
  sourceType 
// 运行相关接口前需要指明源类型.必须有效,否则抛出异常. picker已经显示的时候改变这个值,picker会相应改变来适应.默认 UIImagePickerControllerSourceTypePhotoLibrary.
设置picker属性
  allowsEditing  //是否可编辑
  delegate 
  mediaTypes 
// 指示picker中显示的媒体类型.设置每种类型之前应用availableMediaTypesForSourceType:检查一下.如果为空或者array中类型都不可用,会发生异常.默认 kUTTypeImage, 只能显示图片.
  allowsImageEditing  //propertyDeprecated in iOS 3.1
video选取参数
  videoQuality  // 视频拍摄选取时的编码质量.只有mediaTypes包含kUTTypeMovie时有效.
  videoMaximumDuration  // 秒,video最大记录时间,默认10分钟.只用当mediaTypes包含kUTTypeMovie时有效.
自定义界面
  showsCameraControls 
// 指示 picker 是否显示默认的camera controls.默认是YES,设置成NO隐藏默认的controls来使用自定义的overlay view.(从而可以实现多选而不是选一张picker就dismiss了).只有 UIImagePickerControllerSourceTypeCamera 源有效,否则NSInvalidArgumentException异常.
  cameraOverlayView 
//自定义的用于显示在picker之上的view.只有当源是UIImagePickerControllerSourceTypeCamera 时有效. 其他时候使用抛出NSInvalidArgumentException异常.
  cameraViewTransform 
//预先动画.只影响预先图像,对自定义的overlay view和默认的picker无效.只用当picker的源是 UIImagePickerControllerSourceTypeCamera 时有效,否则NSInvalidArgumentException异常.
选取媒体
– takePicture
// 使用摄像头选取一个图片。自定义overlay可以多选。已经有图片正在选取是调用无效,必须要等delegate收到 imagePickerController:didFinishPickingMediaWithInfo: 消息后才能再次选取。非 UIImagePickerControllerSourceTypeCamera 源会导致异常。
– startVideoCapture
/*
开始视频选取。返回NO可能是
-已经开始选取视频
-设备不支持
-设备空间不足
默认一次只能选取一个,自定义overlay 可以多选。
有视频已经在选取了时调用这个无效.需要先调用stopVideoCapture,等 delegate 收到 imagePickerController:didFinishPickingMediaWithInfo: 消息,才能开始选取其他的.
非UIImagePickerControllerSourceTypeCamera源调用会抛出 NSInvalidArgumentException 异常.
更多功能,见 AV Foundation framework.
*/
– stopVideoCapture
// 结束视频选取,之后系统调用delegate的 imagePickerController:didFinishPickingMediaWithInfo:方法。
设置摄像头
  cameraDevice  // 使用的镜头(默认后置的)
+ isCameraDeviceAvailable: // 摄像设备是否可用.
+ availableCaptureModesForCameraDevice: // 设备可用的选取模式
  cameraCaptureMode  // 相机捕获模式
  cameraFlashMode  // 闪光灯模式(默认自动)
+ isFlashAvailableForCameraDevice: // 是否有闪光能力
相关结构
UIImagePickerControllerSourceType

enum {
   UIImagePickerControllerSourceTypePhotoLibrary,// 设备的图片库
   UIImagePickerControllerSourceTypeCamera,// 设备的摄像头
   UIImagePickerControllerSourceTypeSavedPhotosAlbum // 保存的图像
};

typedef NSUInteger UIImagePickerControllerSourceType;

UIImagePickerControllerQualityType

//Video quality settings for movies recorded with the built-in camera, or transcoded by displaying in the image picker.

enum {
   UIImagePickerControllerQualityTypeHigh            = 0,
   UIImagePickerControllerQualityTypeMedium          = 1,  // default value
   UIImagePickerControllerQualityTypeLow             = 2,
   UIImagePickerControllerQualityType640x480         = 3,
   UIImagePickerControllerQualityTypeIFrame1280x720  = 4,
   UIImagePickerControllerQualityTypeIFrame960x540   = 5
};

typedef NSUInteger UIImagePickerControllerQualityType;

UIImagePickerControllerCameraDevice

enum {
   UIImagePickerControllerCameraDeviceRear,
   UIImagePickerControllerCameraDeviceFront
};

typedef NSUInteger UIImagePickerControllerCameraDevice;

UIImagePickerControllerCameraCaptureMode

//The category of media for the camera to capture.

enum {
   UIImagePickerControllerCameraCaptureModePhoto,
   UIImagePickerControllerCameraCaptureModeVideo
};

typedef NSUInteger UIImagePickerControllerCameraCaptureMode;

UIImagePickerControllerCameraFlashMode
//The flash mode to use with the active camera.

enum {
   UIImagePickerControllerCameraFlashModeOff  = -1,
   UIImagePickerControllerCameraFlashModeAuto = 0,
   UIImagePickerControllerCameraFlashModeOn   = 1
};

typedef NSInteger UIImagePickerControllerCameraFlashMode;

相关方法确定是否有效 isFlashAvailableForCameraDevice: .

UIImagePickerControllerDelegate
使用 UIImageWriteToSavedPhotosAlbum 保存图像, UISaveVideoAtPathToSavedPhotosAlbum 保存视频. 4.0后使用 writeImageToSavedPhotosAlbum:metadata:completionBlock: 保存元数据.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
//包含选择的图片或者一个视频的URL,详见“Editing Information Keys.”
//如果是设置可编辑属性,那么picker会预显示选中的媒体,编辑后的与初始的都会保存在info中.
– imagePickerControllerDidCancel:
– imagePickerController:didFinishPickingImage:editingInfo://Deprecated in iOS 3.0

Editing Information Keys
NSString *const UIImagePickerControllerMediaType;// 媒体类型
NSString *const UIImagePickerControllerOriginalImage;// 原始未编辑的图像
NSString *const UIImagePickerControllerEditedImage;// 编辑后的图像
NSString *const UIImagePickerControllerCropRect;// 源图像可编辑(有效?)区域
NSString *const UIImagePickerControllerMediaURL;// 视频的路径
NSString *const UIImagePickerControllerReferenceURL;// 原始选择项的URL
NSString *const UIImagePickerControllerMediaMetadata;// 只有在使用摄像头并且是图像类型的时候有效.包含选择图像信息的字典类型

下面代码展示了一些基本操作,由一个按钮事件开始进入picker
-(void) pick
{
    [imagePicker takePicture];
}

// 按钮事件
- (IBAction)press:(id)sender {
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    imagePicker.showsCameraControls = NO;
   
    // 自定义界面开始>>>>>>>>>>>>>>
    UIView* iview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    iview.backgroundColor = [UIColor redColor];
    UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
    button.backgroundColor = [UIColor blueColor];
    [button addTarget:self action:@selector(pick) forControlEvents:UIControlEventTouchUpInside];
    [iview addSubview:button];
   

    CGRect newFrame = CGRectMake(0.0,436,320,44);

    iview.frame = newFrame;
    imagePicker.cameraOverlayView =iview;
    // <<<<<<<<<<<<<<<<<
   
    [self presentModalViewController:imagePicker animated:YES];
}

// 图片保存回调
- (void)               image: (UIImage *) image
    didFinishSavingWithError: (NSError *) error
                 contextInfo: (void *) contextInfo
{
    myImageView.image = image;
    NSLog(@"%@",error);
}

// 视频保存回调
- (void)               video: (NSString *) videoPath
    didFinishSavingWithError: (NSError *) error
                 contextInfo: (void *) contextInfo
{
    NSLog(@"%@",videoPath);
    NSLog(@"%@",error);
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 图片类型
    if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeImage]) {
        UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
        // 保存图片
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }
    // 视频类型 kut什么的定义需要 MobileCoreServices.framework 支持
    else if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeMovie]) {
    {
        NSString* path = [[info objectForKey:UIImagePickerControllerMediaURL] path];
        // 保存视频
        UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);       
    }
    // 如果想之后立刻调用UIVideoEditor,animated不能是YES。最好的还是dismiss结束后在调用editor。
    [picker dismissModalViewControllerAnimated:YES];
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [picker dismissModalViewControllerAnimated:YES];
}
官方也有相关例子
http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/CameraAndPhotoLib_TopicsForIOS/Introduction/Introduction.html
分享到:
评论

相关推荐

    视频长度裁切.zip

    视频长度剪切代码,用它可以剪切视频长度。ios,oc语言

    代码.zip代码.zip代码数据分析代码.zip代码.zip代码数据分析

    代码.zip代码.zip代码数据分析

    STM32数字示波器+详细注释+上位机程序+硬件

    功能: 1、波形发生器:使用STM32一路DA实现正弦,三角波,方波,白噪声输出。 任意一种波形幅值在0-3.3V任意可调、频率在一定范围任意可调、方波占空比可调。调节选项可以通过触摸屏完成设置。 2、SD卡存储: SD卡波形存储输出,能够对当前屏幕截屏,以JPG格式存储在SD卡上。能够存储1S内的波形数据,可以随时调用查看。 3、数据传输: 用C#编写上位机,通过串口完成对下位机的控制。(1)实现STOP/RUN功能(2)输出波形电压、时间参数(3)控制截屏(4)控制波形发生器(5)控制完成FFT(6)波形的存储和显示 4、图形接口: UCGUI 2、水平扫速: 250 ns*、500ns、1μs、5 μs、10μs、50μs、500 μs、5ms 、50ms 3、垂直电压灵敏度:10mV/div, 20mV/div, 50mV/div, 0.1V/div, 0,2V/div, 0.5V/div, 1V/div, 2V/div, 5V/div 4、被测信号的各种参数屏幕显示,包括频率、电压峰峰值等。

    粗格栅及进水提升泵房计算书.xlsx

    污水处理计算书

    氧化沟工艺在污水处理中的应用.doc

    课程设计污水处理

    node-v11.10.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JSP企业电子投票系统(源代码+设计说明书+调研报告++文献综述).zip

    JSP企业电子投票系统(源代码+设计说明书+调研报告++文献综述).zip

    node-v10.18.1-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v12.22.7-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.22.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现的能够计算配电网中的潮流,只需在里面填入参数即可运行 .rar

    基于matlab实现的能够计算配电网中的潮流,只需在里面填入参数即可运行。.rar

    基于matlab实现的随机粗糙表面对微气体轴承内气体压强分布的影响.rar

    基于matlab实现的随机粗糙表面对微气体轴承内气体压强分布的影响.rar

    基于使用microPython的开发单片机设计源码.zip

    我们在单片机开发中常会遇到需要将UTF-8转换为GBK编码的需求。在了解各种编码格式的情况下可知, UFT-8不能直接转成GBK,需中转成unicode再转换为gbk。而unicode和gbk之间没有算法可以直接计算,需要查表方式获取。 网上有一些C语言实现的代码,我这里分享一种microPython的实现代码 接下来就是要考虑表的存储方式了,刚开始我想着把表存到代码里直接通过索引实现编码转换。但是gb2312有七千多个字符全部存储要耗费很大内存,即使是32位的esp32也只有512k的内存,加上其他资源的消耗,剩余的内存不足以存储编码转换表。 于是只能将表保存成一个文件(转化成bin文件会比较好,方法类似),通过读写文件来减少内存开销。 具体的查表就是简单的二分法

    基于matlab实现的实现信号的frft变换

    基于matlab实现的实现信号的frft变换,傅立叶变换是将观看角度从时域转变到频域,分数阶傅立叶变换就是以观看时频面的角度去旋转时频面的坐标轴,然后再从观察频域的角度去分析信息。.rar

    node-v11.10.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    杏鲍菇70m3d废水处理工程设计方案.doc

    课程设计污水处理

    node-v10.23.1-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.3.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    城市小区生活污水处理工艺设计.pptx

    课程设计污水处理

    ASP+ACCESS基于WEB车辆管理系统(源代码+设计说明书).zip

    ASP+ACCESS基于WEB车辆管理系统(源代码+设计说明书).zip

Global site tag (gtag.js) - Google Analytics