版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译iOS 6 Programming Cookbook第 13 章照相机和图片库翻译时间:2013-03-31DevDiv 热心网友自发组织翻译DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日1iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译写在前面 iOS 6 Programming Cookbook 是 OReilly 出版社出版,作者是 Vandad Nahavandipoor。在这里希望大家尊重原创,尊重知识版权,此次翻译是 De
2、vDiv 热情网友感觉此书还行,便自发组织翻译,并无偿分享给广大 iOS 开发者。内容仅供交流学习使用,切勿商用或者其它一切用途。如果你觉得内容可以的话,请主动到官网进行购买:严重警告:限下载后 24 小时内删除DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日2iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译目录写在前面2目录3第 13 章 照相机和图片库5 1.0. 介绍5 1.1. 检测和研究摄像头6 1.1.1. 问题 6 1.1.2. 方案 6 1.1.3. 讨论 7 1.2. 利用摄像头进行拍照10 1.2.1
3、. 问题 10 1.2.2. 方案 10 1.2.3. 讨论 11 1.2.4. 参考 12 1.3. 利用摄像头进行视频的录制12 1.3.1. 问题 12 1.3.2. 方案 13 1.3.3. 讨论 14 1.3.4. 参考 14 1.4. 把图片存储在多媒体库中15 1.4.1. 问题 15 1.4.2. 方案 15 1.4.3. 讨论 16 1.5. 把视频录像文件保存在多媒体库中 1.5.1. 问题 16 1.5.2. 方案 17 1.5.3. 讨论 17 1.6. 从多媒体库中获得图片和视频 18 1.6.1. 问题 18 1.6.2. 方案 18 1.6.3. 讨论 19 1.
4、6.4. 参考 19 1.7. 从资源库中直接获取资源19 1.7.1. 问题 19 1.7.2. 方案 19 1.7.3. 讨论 21 1.8. 在 iOS 设备中编辑视频 24 1.8.1. 问题 24 1.8.2. 方案 24 1.8.3. 讨论 24 1.8.4. 参考 2716DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日3iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日4iOS 6 Programming CookbookD
5、evDiv 热心网友自发组织翻译第 13 章 照相机和图片库1.0. 介绍 目前一些 iOS 的设备都是带有摄像头的,例如 iPhone5 有前后两个摄像头,iPhone3G 和iPhone3GS 是 有 一 个 摄 像 头 , 而 有 些 是 没 有 带 摄 像 头 的 , 比 如 说 iPhone 第 一 代 。UIImagePickerController 这个类可以为大家提供照相,视频录制功能。 本章中,你想学到如何照相和录制视频,以及访问这些照片和视频。并且知道如何访问iOS 设备(如 iPod 和 iPad)中图片库中的图片和视频。iOS 模拟器不支持照相功能,因此如果我们需要测试
6、这一类的程序时我们需要连接到真机。本章中,我们首先需要判断一下 iOS 设备中的摄像头是否可用。也可以判断摄像头是否允许你来拍照或者录制视频。为了完成这个需求,需要将 MobileCoreServices.framework 框架添加到 target 中,如下步骤:1、在 Xcode 上点击你的工程图标;2、选择需要添加 framework 的 targett;3、在屏幕的顶部选择 Build Phases 标签栏;4、在 Biuld Phase 标签里,使用 Libraries box 寻找可拓展 Link Binary 并按下“+” 按钮;5、在显示出来的列表中,选择 AddressBoo
7、k6、点击“Add”按钮我们来看一下另外一个主题:访问 iOS 设备中不同相册里面的图片和视频。访问相册中的图片要比视频更直接简单。针对图片,我们将给出图片的地址,然后就可以简单的将图片数据加载到 NSData 实例对象中,或者 UIImage 实例对象中。针对视频,我们并不指定一个文件地址来加载视频。而是给出如下这样的地址:assets-library:/asset/asset.MOV?id=1000000004&ext=MOV 针对这样的地址,我们需要使用 Assets Library 框架。Assets Library 框架运行我们通过Photos 程序来访问内容,包括用户采集到的图片和
8、视频。这些图片和视频也能够被 PhotoLibrary 访问。 为了确保本章中的代码示例能够正确编译,需要按照下面的步骤将 Assets Library 框架添加到 target 中: 1、在 Xcode 上点击你的工程图标; 2、选择需要添加 framework 的 targett; 3、在屏幕的顶部选择 Build Phases 标签栏; 4、在 Biuld Phase 标签里,使用 Libraries box 寻找可拓展 Link Binary 并按下“+”DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日5iOS 6 Programming Cookb
9、ook 按钮;5、在显示出来的列表中,选择 AssetsLibrary6、点击“Add”按钮DevDiv 热心网友自发组织翻译 为了访问给定的 URL 数据,需要按照如下步骤进行: 1、分配和初始化一个 ALAssetsLibrary 对象。Assets Library 对象能够帮助你通过 Photos程序访问视频和图片. 2、使用 ALAssetsLibrary 的 assetForURL:resultBlock:failureBlock 实例方法来访问资源。这个资源可以是图片,视频,或者今后苹果决定添加到 Photo 库中的其它资源。这个方法是与 block 一起使用的。更多关于 bloc
10、k 对象和 GCD,请参考第六章。 3、release 调第一步中创建的对象。 至 此 , 你 可 能 在 考 虑 : 我 如 何 访 问 资 源 中 的 数 据 ? ALAssetsLibrary 的assetForURL:resultBlock:failureBlock 实例方法的参数 resultBlock 需要指向一个 block 对象,这个 block 对象接收一个 ALAsset 类型的参数。通过 ALAsset 就可以访问图片和视频了。更多关于在 Photo 库中存储图片和视频请参考 13.4 和 13.5 小节。如果你希望学习从 Photo 库和 Assets 库中检索图片和视
11、频,请参考 13.6 和 13.7 小节。1.1. 检测和研究摄像头1.1.1.问题你想检测一下设备是否有你可以访问的摄像头。在使用摄像头之前,进行这样的检测是非常重要的,除非你能确定你的程序永远都不会运行在没有摄像头的设备中。1.1.2.方案 通 过 UIImagePickerController 的 isSourceTypeAvailable 这个 方法进行 检测,并传递UIImagePickerControllerSourceTypeCamera 这个参数进去。代码如下- (BOOL) isCameraAvailablereturn UIImagePickerController isS
12、ourceTypeAvailable:UIImagePickerControllerSourceTypeCamera;- (BOOL) application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptionsif (self isCameraAvailable)NSLog(Camera is available.); else NSLog(Camera is not available.);self.window = UIWindow alloc initWithFra
13、me:UIScreen mainScreen bounds;self.window.backgroundColor = UIColor whiteColor;self.window makeKeyAndVisible;return YES;DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日6iOS 6 Programming Cookbook1.1.3.讨论DevDiv 热心网友自发组织翻译 当使用 UIImagePickerController 个类来进行类似拍照,录像的功能的时候,你就必须要对摄像头的存在与否进行检测。通过 isSourceTypeAvai
14、lable 这个方法,能够对三种数据进行检查。1. 摄像头的功能,通过给这个方法传递 UIImagePickerControllerSourceTypeCamera 这个值2. 图片库,通过传递 UIImagePickerControllerSourceTypePhotoLibrary 这个对象。这个时候 是打开了照相目录的顶层目录3. 列表形式的浏览目录,通过传递 UIImagePickerControllerSourceTypeSavedPhotosAlbum 这 个值。 如果你想检测如上的任何一个功能是否能够使用,那么你就必须要传递不同的参数。下面让我们看一下具体的代码改如何实现,我在
15、app delegate 头文件中导入框架的头文件。#import #import #import interface Detecting_and_Probing_the_CameraAppDelegate: UIResponder property (strong, nonatomic) UIWindow *window;end现在我们可以使用isSourceTypeAvailable:和availableMediaTypesForSourceType:方法来判断媒体资源是否可用(摄像头、Photo库等)。- (BOOL) cameraSupportsMedia:(NSString *)pa
16、ramMediaTypesourceType:(UIImagePickerControllerSourceType)paramSourceType_block BOOL result = NO;if (paramMediaType length = 0)NSLog(Media type is empty.);return NO;NSArray *availableMediaTypes =UIImagePickerController availableMediaTypesForSourceType:paramSourceType;availableMediaTypes enumerateObj
17、ectsUsingBlock:(id obj, NSUInteger idx, BOOL *stop) NSString *mediaType = (NSString *)obj;if (mediaType isEqualToString:paramMediaType)result = YES;*stop= YES;return result;- (BOOL) doesCameraSupportShootingVideosreturn self cameraSupportsMedia:(_bridge NSString *)kUTTypeMoviesourceType:UIImagePicke
18、rControllerSourceTypeCamera;- (BOOL) doesCameraSupportTakingPhotosreturn self cameraSupportsMedia:(_bridge NSString *)kUTTypeImagesourceType:UIImagePickerControllerSourceTypeCamera;- (BOOL) application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptionsif (self do
19、esCameraSupportTakingPhotos)DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日7iOS 6 Programming CookbookNSLog(The camera supports taking photos.); else NSLog(The camera does not support taking photos);if (self doesCameraSupportShootingVideos)NSLog(The camera supports shooting videos.); else NSLog(The camer
20、a does not support shooting videos.);self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds;self.window.backgroundColor = UIColor whiteColor;self.window makeKeyAndVisible;return YES;DevDiv 热心网友自发组织翻译注意:我们使用_bridge 将 KUTTypeMovie 和 KUTTypeImage 转换为 NSString。但是有些是有,有些 iOS 设备是有超过一个摄像头的,为
21、了检测所有的摄像头是否都能正常功能做,那么你就需要使用 isCameraDeviceAvailable 这个方法了,代码如下。- (BOOL) isFrontCameraAvailablereturn UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront;- (BOOL) isRearCameraAvailablereturn UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCame
22、raDeviceRear; 当 在 比 较 老的 没 有 前置 摄 像 头的 设 备 中,你 将 会 看 到 isFrontCameraAvailable , 和isRearCameraAvailable 的值分别是 YES 和 NO。当你在 iphone4S 中测试的时候,发觉前后摄像头都是 YES 的。 如果单纯的检测摄像头是否可用不能满足于你的程序,你可以使用UIImagePickerController 类来获取其它一些设置。其中一个设置就是是否支持闪光灯。请记住,UIImagePickerController 的 isFlashAvailableForCameraDevice:类方法
23、在检查是否支持闪光灯之前,会首先检查一下摄像头是否可用。因此在运行这个函数时,不需要首先对摄像头可用进行检查。- (BOOL) isFlashAvailableOnFrontCamerareturn UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront;- (BOOL) isFlashAvailableOnRearCamerareturn UIImagePickerController isFlashAvailableForCameraDevice:UII
24、magePickerControllerCameraDeviceRear;现在我们如果我们将本节中介绍的所有方法利用起来,并在 app delegate 中进行测试,那么我们会在不同设备上看到不同的结果:- (BOOL) application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptionsif (self isFrontCameraAvailable)DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日8iOS 6 Programmi
25、ng CookbookNSLog(The front camera is available.);if (self isFlashAvailableOnFrontCamera)NSLog(The front camera is equipped with a flash); else NSLog(The front camera is not equipped with a flash); else NSLog(The front camera is not available.);if (self isRearCameraAvailable)NSLog(The rear camera is
26、available.);if (self isFlashAvailableOnRearCamera)NSLog(The rear camera is equipped with a flash); else NSLog(The rear camera is not equipped with a flash); else NSLog(The rear camera is not available.);if (self doesCameraSupportTakingPhotos)NSLog(The camera supports taking photos.); else NSLog(The
27、camera does not support taking photos);if (self doesCameraSupportShootingVideos)NSLog(The camera supports shooting videos.); else NSLog(The camera does not support shooting videos.);self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds;self.window.backgroundColor = UIColor whiteColor
28、;self.window makeKeyAndVisible;return YES;DevDiv 热心网友自发组织翻译如上代码执行之后,将会打印如下效果。(iPhone4)The front camera is available.The front camera is not equipped with a flashThe rear camera is available.The rear camera is equipped with a flashThe camera supports taking photos.The camera supports shooting videos.
29、如上代码执行之后,将会打印如下效果。(3GS)The front camera is not available.The rear camera is available.The rear camera is not equipped with a flashThe camera supports taking photos.The camera supports shooting videos.如上代码执行之后,将会打印如下效果。(第一代 iPad)The front camera is not available.DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月
30、17 日9iOS 6 Programming CookbookThe rear camera is not available.The camera does not support taking photosThe camera does not support shooting videosDevDiv 热心网友自发组织翻译如上代码执行之后,将会打印如下效果。(第二代 iPad)The front camera is available.The front camera is not equipped with a flashThe rear camera is available.The
31、 rear camera is not equipped with a flashThe camera supports taking photos.The camera supports shooting videos.1.2. 利用摄像头进行拍照1.2.1.问题你希望用户能通过摄像头拍照,并能够访问刚刚拍摄的这张相片。1.2.2.方案 实例化 UIImagePickerController 这个类,然后在当前 view control 上以模态方式将这个view control 显示出来。下面是 view control 的头文件:#import #import #import inter
32、face Taking_Photos_with_the_CameraViewController: UIViewController end UIImagePickerController 作为 UIImagePickerController 的 delegate,必须要遵循UINavigationControllerDelegate 和 UIImagePickerControllerDelegate 这两个协议类。如果你忘记在你的头文件中添加这两个协议对象。那么在你将这个 view control 赋值给UIImagePickerController 的 delegate 时,你将会在编译的
33、时候有一堆的警告。请记住,如果你的对象没有名且的遵循 UINavigationControllerDelegate 和UIImagePickerControllerDelegate 协议,你任然可以将对象赋值给 UIImagePickerController 的delegate,只不过你需要实现协议中必须实现的方法。不过我还是建议你在头文件中包含需要用到的协议,这样可以避免编译器的相关警告。 在 view control 的实现文件中,我将尝试以模态的方式显示出 image picker control,如下:- (void)viewDidLoadsuper viewDidLoad;if (s
34、elf isCameraAvailable &self doesCameraSupportTakingPhotos)UIImagePickerController *controller =UIImagePickerController alloc init;controller.sourceType = UIImagePickerControllerSourceTypeCamera;NSString *requiredMediaType = (_bridge NSString *)kUTTypeImage;DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日1
35、0iOS 6 Programming Cookbookcontroller.mediaTypes = NSArray allocinitWithObjects:requiredMediaType, nil;controller.allowsEditing = YES;controller.delegate = self;self.navigationController presentModalViewController:controlleranimated:YES; else NSLog(Camera is not available.);DevDiv 热心网友自发组织翻译我们在如上的代码
36、中使用了 isCameraAvailable 和 doesCameraSupportTaking这两个方法,关于这两个方法的实现请参考 13.1 中的介绍。 在上面的示例中,我们允许用户使用 image picker 获取一张照片。你可能已经注意到,我将 image picker 的 delegate 属性设置为 self,也就是 view control。为此,我们必须要实现UIImagePickerControllerDelegate 中定义的方法:- (void) imagePickerController:(UIImagePickerController *)pickerdidFini
37、shPickingMediaWithInfo:(NSDictionary *)infoNSLog(Picker returned successfully.);NSString *mediaType = info objectForKey:UIImagePickerControllerMediaType;if (mediaType isEqualToString:(_bridge NSString *)kUTTypeMovie)NSURL *urlOfVideo =info objectForKey:UIImagePickerControllerMediaURL;NSLog(Video URL
38、 = %, urlOfVideo);else if (mediaType isEqualToString:(_bridge NSString *)kUTTypeImage)/* Lets get the metadata. This is only forimages. Not videos */NSDictionary *metadata =info objectForKey:UIImagePickerControllerMediaMetadata;UIImage *theImage =info objectForKey:UIImagePickerControllerOriginalImag
39、e;NSLog(Image Metadata = %, metadata);NSLog(Image = %, theImage);picker dismissModalViewControllerAnimated:YES;- (void)imagePickerControllerDidCancel:(UIImagePickerController *)pickerNSLog(Picker was cancelled);picker dismissModalViewControllerAnimated:YES;1.2.3.讨论 关于 picker control 的 delegate 我们需要注
40、意几个问题,首先,首先就是 image pickercontrol 调用的两个 delegate 方法。当用户完成照片选取后,会调用DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日11iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译imagePickerController:didFinishPickingMediaWithInfo:方法。而当用户取消时,则会调用imagePickerController:DidCancel:方法。 并且在 imagePickerController:didFinishPickingMe
41、diaWithInfo:方法中包含了用户获得的内容,是一个图片或者视频。didFinishPickingMediaWithInfo 这个参数是一个字典,告诉你选取的图片,已经想过元数据,以及其它一些有用的信息。在这个方法中你首先必须要做的就是读取出字典中 UIImagePickerControllerMediaType 键对应的值。值的类型为 NSString,值的内容可能是如下两个之一: kUTTypeImage 通过摄像头拍摄的一个图片 kUTTypeMovie 通过摄像头拍摄的一个视频 注意:kUTTypeImage 和 kUTTypeMovie 值是在 Mobile Core Serv
42、ices 框架中可用,并且类型为 CFStringRef 类型。如果需要,你可以将其转换为 NSString。 在知道通过摄像头获得的资源类型之后(视频或图片),就可以使用didFinishPickingMediaWithInfo 字典参数访问资源属性了。 如果是图片(kUTTypeImage)的话,可以访问的 key 如下: UIImagePickerControllerMediaMetadata 这个 key 的值类型为 NSDictionary。这个字典包含了用户拍摄的图片的大量有用信息。关于这些值的讨论超出了本文的介绍范围。 UIImagePickerControllerOrigina
43、lImage 这个 key 的值类型为 UIImage,包含了用户拍摄的图片 UIImagePickerControllerCropRect 如果编辑是可用的话(使用 UIImagePickerController 的 allowsEditing 属性),这个key 的值将包含一个裁减区域的矩形。 UIImagePickerControllerEditedImage 如果编辑是可用的话(使用 UIImagePickerController 的 allowsEditing 属性),这个key 的值将包含一个裁减后的图片(放大或缩小)。 如果用户拍摄的是视频,你可以访问imagePickerCon
44、troller:didFinishPickingMediaWithInfo:方法中 didFinishPickingMediaWithInfo参数里面的 UIImagePickerControllerMediaURL 键。这个键的值是一个 NSURL 类型,包含了用户拍摄的视频的 URL。 当你获得了用户通过摄像头拍摄的一个 UIImage 引用后,就可以在程序中方便的使用它了。 注意:默认情况下,在程序中,通过 image picker control 拍摄的相片不会被保存。1.2.4.13.1 小节参考1.3. 利用摄像头进行视频的录制1.3.1.问题12版本 1.0 | 2013 年 0
45、3 月 17 日DevDiv 热心网友自发组织翻译iOS 6 Programming Cookbook你想在你的应用中添加视频录制的功能。DevDiv 热心网友自发组织翻译1.3.2.方案 使用 UIImagePickerController,并且附带 UIImagePickerControllerSourceTypeCamera 源和kUTTypeMovie 媒体类型:- (void)viewDidLoadsuper viewDidLoad;if (self isCameraAvailable &self doesCameraSupportTakingPhotos)UIImagePicker
46、Controller *controller =UIImagePickerController alloc init;controller.sourceType = UIImagePickerControllerSourceTypeCamera;NSString *requiredMediaType = (_bridge NSString *)kUTTypeMovie;controller.mediaTypes = NSArray allocinitWithObjects:requiredMediaType, nil;controller.allowsEditing = YES;control
47、ler.delegate = self;self.navigationController presentModalViewController:controlleranimated:YES; else NSLog(Camera is not available.);注意:上面代码中使用到的 isCameraAvailable 和 doesCameraSupportShootingVideos 方法在 13.1 中有实现。下面是 image picker control 的 delegate 方法实现:- (void) imagePickerController:(UIImagePickerC
48、ontroller *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)infoNSLog(Picker returned successfully.);NSLog(%, info);NSString *mediaType = info objectForKey:UIImagePickerControllerMediaType;if (mediaType isEqualToString:(_bridge NSString *)kUTTypeMovie)NSURL *urlOfVideo =info objectForKey:UIImage
49、PickerControllerMediaURL;NSLog(Video URL = %, urlOfVideo);NSError *dataReadingError = nil;NSData *videoData =NSData dataWithContentsOfURL:urlOfVideooptions:NSDataReadingMappederror:&dataReadingError;if (videoData != nil)/* We were able to read the data */NSLog(Successfully loaded the data.); else /*
50、 We failed to read the data. Use the dataReadingErrorvariable to determine what the error is */NSLog(Failed to load the data with error = %,dataReadingError);picker dismissModalViewControllerAnimated:YES;DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日13iOS 6 Programming Cookbook- (void)imagePickerControl
51、lerDidCancel:(UIImagePickerController *)pickerNSLog(Picker was cancelled);picker dismissModalViewControllerAnimated:YES;DevDiv 热心网友自发组织翻译1.3.3.讨论如上代码,首先我们还是需要先检测设备是否能够支持拍照的功能,然后我们在设置成录像的模式,最后我们可以在回调方法 didFinishPickingMediaWithInfo 中获取到我们录制的视频。当用户在进行视频录制的时候,这些视频会保存在一些临时的目录当中,并不是在多媒体的目录当中,一个通常的路径形式如下。
52、file:/localhost/private/var/mobile/Applications /tmp/capture-作为一个开发人员,我们为用户提供的并不是简单的录像的功能,我们还需要提供视频格式的问题。那么我们就需要使用如下两个参数进行设置。videoQuality这个属性,我们有两个设置的值,UIImagePickerControllerQualityTypeHigh(高清)UIImagePickerControllerQualityTypeMedium(普清)videoMaximumDuration这个属性让我们用来设置视频录制的最小单元,这个属性是用秒来计算的。例如我们需要录制高
53、清的视频,每个文件的单元为 30 秒,那么我们就需要修改代码,代码如下。- (void)viewDidLoadsuper viewDidLoad;if (self isCameraAvailable &self doesCameraSupportTakingPhotos)UIImagePickerController *controller =UIImagePickerController alloc init;controller.sourceType = UIImagePickerControllerSourceTypeCamera;NSString *requiredMediaType
54、= (_bridge NSString *)kUTTypeMovie;controller.mediaTypes = NSArray allocinitWithObjects:requiredMediaType, nil;controller.allowsEditing = YES;controller.delegate = self;/* Record in high quality */controller.videoQuality = UIImagePickerControllerQualityTypeHigh;/* Only allow 30 seconds of recording
55、*/controller.videoMaximumDuration = 30.0f;self.navigationController presentModalViewController:controlleranimated:YES; else NSLog(Camera is not available.);1.3.4.13.1 小节参考DevDiv 热心网友自发组织翻译版本 1.0 | 2013 年 03 月 17 日14iOS 6 Programming CookbookDevDiv 热心网友自发组织翻译1.4. 把图片存储在多媒体库中1.4.1.问题你需要来把图片存储在用户的图片库中1
56、.4.2.方案使用 UIImageWriteToSavedPhotosAlbum 来处理:- (void) imageWasSavedSuccessfully:(UIImage *)paramImagedidFinishSavingWithError:(NSError *)paramErrorcontextInfo:(void *)paramContextInfoif (paramError = nil)NSLog(Image was saved successfully.); else NSLog(An error happened while saving the image.);NSLo
57、g(Error = %, paramError);- (void) imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)infoNSLog(Picker returned successfully.);NSLog(%, info);NSString *mediaType = info objectForKey:UIImagePickerControllerMediaType;if (mediaType isEqualToString:(_brid
58、ge NSString *)kUTTypeImage)UIImage *theImage = nil;if (picker allowsEditing)theImage = info objectForKey:UIImagePickerControllerEditedImage; else theImage = info objectForKey:UIImagePickerControllerOriginalImage;SEL selectorToCall =selector(imageWasSavedSuccessfully:didFinishSavingWithError:contextI
59、nfo:);UIImageWriteToSavedPhotosAlbum(theImage,self,selectorToCall,NULL);picker dismissModalViewControllerAnimated:YES;- (void)imagePickerControllerDidCancel:(UIImagePickerController *)pickerNSLog(Picker was cancelled);picker dismissModalViewControllerAnimated:YES;- (void)viewDidLoadsuper viewDidLoad
60、;if (self isCameraAvailable &self doesCameraSupportTakingPhotos)UIImagePickerController *controller =UIImagePickerController alloc init;controller.sourceType = UIImagePickerControllerSourceTypeCamera;NSString *requiredMediaType = (_bridge NSString *)kUTTypeImage;controller.mediaTypes = NSArray alloc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级道德与法治《慧眼·法治·维权者》教案
- 初中八年级道德与法治上册《我对谁负责 谁对我负责》核心素养导向教案
- 八年级下册数学试卷突破课教学设计
- 北师大版小学数学五年级上册“摸球游戏”概率初步教学设计
- 北师大版小学数学三年级下册《千克、克、吨》教学设计
- 八年级语文上册《山水幽思·尺素传情-与朱元思书品读》教案
- 初三数学一轮复习专题:圆的核心性质深度探究与中考链接教案
- 高级健康管理师考试试题与答案-基础知识
- MBA核心课程《战略决策中的不确定性思维与管理创新》教学设计
- 筒灯安装验收记录
- 2026年教师职业能力测评题库及答案
- 2026江苏苏州工业园区综合执法系统招聘工作人员20人考试参考试题及答案解析
- 2025年福建省福州市八年级地理生物会考真题试卷(含答案)
- 航空油料化验员职业能力考核复习题库(附答案)
- 环保行业财务分析特点报告
- 半导体厂务项目工程管理 课件 项目1 任务1.1半导体厂务项目工程管理概述
- 2025重庆市消防救援总队机关及直属单位政府专职消防员招录113人(公共基础知识)综合能力测试题附答案解析
- 漂浮式海底锚桩施工方案
- 公司网络遭受大规模拒绝服务(DDoS)攻击应急预案
- 新能源公司风电场电力企业应急能力建设评估自评报告
- 南昌大学HFSS工程应用仿真实验报告:18
评论
0/150
提交评论