博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多媒体类型选择 <MobileCoreServices/UTCoreTypes.h>
阅读量:5140 次
发布时间:2019-06-13

本文共 7850 字,大约阅读时间需要 26 分钟。

 

设置源   

+ availableMediaTypesForSourceType: // 指定源可用的媒体种类  (指定源本人认为应当是

Camera、PhotosLibaray)

       .mediaTypes 会指定的更详细。

      .sourceType   结构 UIImagePickerControllerSourceType

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

+ isSourceTypeAvailable: // 指定源是否在设备上可用

      sourceType

 

用到的框架

#import <MediaPlayer/MediaPlayer.h>

#import <MobileCoreServices/UTCoreTypes.h>

遵循的协议

UIImagePickerControllerDelegate, UINavigationControllerDelegate

 由于 UIImagePickerController是UINavigationController的子类,所以类必须遵循这两个协议。 UINavigationControllerDelegate中的方法都是可选的,使用图像选取器不一定需要他们,但是与此协议保持一致,否则编译会发 出警告。

 

不能定制界面,不可派生子类。

使用步骤:
    检查制定源是否可用. 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
    – 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];
}

 

转载于:https://www.cnblogs.com/allanliu/p/4459283.html

你可能感兴趣的文章
ubuntu 10.10安装nginx+php的过程
查看>>
springmvc的DispatcherServlet拦截以及访问静态资源html、js、css 404问题
查看>>
怎样用Visual Basic6.0编写木马程序
查看>>
如何正确使用Cocoapods
查看>>
站立会议个人5
查看>>
Gulp--Less
查看>>
使用JSONPath
查看>>
嵌入式软件设计第9次实验报告
查看>>
morphia查询mongodb内嵌文档
查看>>
springcloud超时机制
查看>>
Redis——学习之路一(初识redis)
查看>>
[转] ElasticSearch 常用的查询过滤语句
查看>>
mysql启动时报 本地计算机上的mysql服务启动后停止。某些服务在未由其他服务或程...
查看>>
JavaScript(第二部分)
查看>>
Round #345 C. Watchmen(Div.2)
查看>>
C语言中volatile关键字的作用
查看>>
2019春第七周作业
查看>>
Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
查看>>
css样式 body的font-size 为什么用625%
查看>>
利用python进行数据分析
查看>>