IOS 摄像头使用(1)-UIImagePickerController
IOS有两种拍照与拍摄视频的方式
1. 直接使用UIImagePickerController, 这可以提供一个简单便捷的拍照与选择图库里图片的功能.
2.另一种方式就是通过AV Foundation framework,来完全自定义拍照的界面与选择图库的界面.
这里介绍第一种, 如何使用UIImagePickerController.
一.拍照
步骤
1. 定义UIImagePickerController, 启动拍照界面
(1)首先摄像头对于你的应用是必须的,那你应该在项目的Info.plist的Required device capabilities里添加自己要的设备.这里有相关的设备描述.
(2) 要确保你的设备可用,所以在代码中最好先用UIImagePickerController的isSourceTypeAvailable:方面来判断一下,否则如果直接写逻辑,那在设备不可用时,程序会抛异常.
(3) 在拍摄完后,想要能够关掉拍摄界面,那就必须要实现UIImagePickerControllerDelegate
UIImagePickerController 里有几个比较重要的属性.
Source type: 这个参数是用来确定是调用摄像头还是调用图片库.如果是 UIImagePickerControllerSourceTypeCamera 就是调用摄像头,如果是UIImagePickerControllerSourceTypePhotoLibrary 就是调用图片库,如果是UIImagePickerControllerSourceTypeSavedPhotosAlbum 则调用iOS设备中的胶卷相机的图片.
Media types:在拍照时,用来指定是拍静态的图片还是录像.kUTTypeImage
表示静态图片, kUTTypeMovie表示录像.
Editing controls :用来指定是否可编辑.将allowsEditing
属性设置为YES表示可编辑,NO表示不可编辑.
示例代码:(来源于apple官方文档)
- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate { // here, check the device is available or not if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera] == NO) || (delegate == nil)|| (controller == nil)) return NO; UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init]; cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; // Displays a control that allows the user to choose picture or // movie capture, if both are available: cameraUI.mediaTypes = [UIImagePickerControlleravailableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; // Hides the controls for moving & scaling pictures, or for // trimming movies. To instead show the controls, use YES. cameraUI.allowsEditing = NO; cameraUI.delegate = delegate; [controller presentModalViewController: cameraUI animated: YES]; returnYES; }
如果只想让摄像头只能摄像,而不能拍照,那应该设置mediaTypes
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie
, nil];
kUTTypeImage 对应拍照
kUTTypeMovie
对应摄像
这要导入MobileCoreServices.framework,然后再
#import <MobileCoreServices/UTCoreTypes.h>
然后就可以在一个触发事件中进行调用.
- (IBAction) showCameraUI {
[self startCameraControllerFromViewController: self
usingDelegate: self];
}
2. 设置delegate
在拍摄完成后,要进行delegate的设置,这样才能够让程序互动起来.
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker ; 点击cancel后执行的方法
- (void) imagePickerController: (UIImagePickerController *) picker |
didFinishPickingMediaWithInfo: (NSDictionary *) info; 拍摄完成后要执行的方法 |
// For responding to the user tapping Cancel. - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker { [[picker parentViewController] dismissModalViewControllerAnimated: YES]; [picker release]; } // For responding to the user accepting a newly-captured picture or movie - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info { NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; UIImage *originalImage, *editedImage, *imageToSave; // Handle a still image capture if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) { editedImage = (UIImage *) [info objectForKey: UIImagePickerControllerEditedImage]; originalImage = (UIImage *) [info objectForKey: UIImagePickerControllerOriginalImage]; if (editedImage) { imageToSave = editedImage; } else { imageToSave = originalImage; } // Save the new image (original or edited) to the Camera Roll UIImageWriteToSavedPhotosAlbum (imageToSave, nil, nil , nil); } // Handle a movie capture if (CFStringCompare ((CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { NSString *moviePath = [[info objectForKey: UIImagePickerControllerMediaURL] path]; if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)) { UISaveVideoAtPathToSavedPhotosAlbum ( moviePath, nil, nil, nil); } } [[picker parentViewController] dismissModalViewControllerAnimated: YES]; [picker release]; }
// 这个方法就是在拍摄完成后,将图片或视频,保存到胶卷相机. 我们所需要的东西都保存在info 这个 NSDictionary中 |
@property (strong,nonatomic) UIPopoverController * popoverViewControl;
在implement中:
- (IBAction)takeImage:(id)sender { if ([self.popoverViewControl isPopoverVisible]) { [self.popoverViewControl dismissPopoverAnimated:YES]; }else { if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = NO; picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; // picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum]; picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *) kUTTypeMovie , nil]; self.popoverViewControl = [[UIPopoverControlleralloc] initWithContentViewController:picker]; self.popoverViewControl.delegate = self; CGRect popoverRect = [self.view convertRect:[sender frame] fromView:[sender superview]]; popoverRect.size.width = MIN(popoverRect.size.width, 100); [self.popoverViewControl presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAnyanimated:YES]; } } } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { self.imageView.image = [info objectForKey:UIImagePickerControllerOriginalImage]; //imageview是自己定义的一个image view 控件,用来显示选中的图片 [self.popoverViewControldismissPopoverAnimated:YES]; }
以上就是UIImagePickerController的大概用法,主要就是自己看了apple的官方文档,然后实践后,记录下来,留用,防止忘了.
对于popover 有一个很好的教程: Using the PopoverView in iPad App Development
相关推荐
本教程将深入探讨如何使用`UIImagePickerController`来调用摄像头,并创建一个基本的相机界面示例。 一、`UIImagePickerController`简介 `UIImagePickerController`是Apple的UIKit框架中的一个类,主要用于处理图像...
本教程主要探讨如何在iOS中启动摄像头、使用系统提供的拍照功能,以及如何自定义"重拍"(Retake)和"使用照片"(Use Photo)按钮的中文显示。我们将重点讲解以下几个关键知识点: 1. **启动摄像头**: iOS 提供了 `...
在iOS开发中,照相机和摄像头的使用是十分常见的功能,尤其在移动应用中,它们为用户提供了丰富的交互体验。本教程将引导你入门iOS中摄像头和照相机的基本操作,包括如何实现一个简单的增强现实(AR)Demo以及如何让...
以上就是关于iOS中`UIImagePickerController`的基本使用和功能介绍。通过这个组件,你可以方便地集成拍照、录像和选择媒体文件的功能到你的应用中。记得在实际项目中根据需求进行定制和优化,确保用户体验。
在iOS中,我们可以使用`AVFoundation`框架来访问和控制设备的摄像头。首先,我们需要创建一个`AVCaptureSession`实例,它是处理摄像头输入和输出的核心。接着,设置`AVCaptureDeviceInput`为摄像头输入,并将其添加...
在iOS应用中,我们通常使用AVFoundation来访问本地视频库和捕捉摄像头视频流。 2. **请求权限**: 在iOS 6及以上版本,为了保护用户隐私,访问摄像头和相册需要用户授权。我们需要在Info.plist文件中添加`...
关于iOS摄像头和相册的应用,可以使用UIImagePickerController类来完成控制。 UIImagePickerController 这个类可以为大家提供照相的功能,以及图片,视频浏览的功能。 检查硬件是否安装有摄像头或者允许操作相册 ...
在iOS应用开发中,获取本地视频库和捕获摄像头视频流是常见的功能需求,尤其是在创建媒体分享、视频编辑或者直播类应用中。本项目“VideoUpload”提供的源码着重展示了如何实现这些功能。以下是关于这个主题的详细...
总的来说,UIImagePickerController是iOS开发中的一个核心组件,它简化了与摄像头和相册的交互,让开发者能够快速地集成这些功能。通过对它的深入理解和熟练使用,可以创建出更富有交互性和用户体验优良的应用程序。...
- 创建`UIImagePickerController`:这是苹果提供的默认相机控制器,你可以通过设置其`sourceType`属性来选择是调用后置摄像头还是前置摄像头,或者让用户选择从相册选取。 - 添加相机权限请求:与相册类似,你需要...
iOS_AlbumAndWaterMark 访问相册摄像头保存图片至相册以及图片加水印 #pragma mark - 访问相册摄像头 ----------------------------访问相册摄像头--------------------------- 在ViewController.h中: @interface ...
`UIImagePickerController`是iOS提供的一种简单方式来访问摄像头,但为了更高级的定制,开发者可能选择了自定义视图。`UIView`和`UIViewController`的子类通常用于创建用户界面,并通过Auto Layout或Size Classes...
1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口; 用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤: 1. 初始化...
这个"ios-使用swift语言编写的改变用户头像的demo(UIImagePickerController).zip"是一个示例项目,它演示了如何使用UIImagePickerController来实现用户头像的更换功能。UIImagePickerController是iOS SDK提供的一...
在iOS 11及以上版本,系统对访问用户隐私数据如相册和摄像头进行了严格的限制,应用需要在Info.plist文件中声明相应的使用权限。对于相册访问,添加`NSPhotoLibraryUsageDescription`键,并设置一个合理的描述性文字...
3. **UIImagePickerController**:在 PictureMe 中,很可能使用了 UIImagePickerController 来让用户选择或拍摄照片。这个内置组件允许用户访问设备的摄像头或相册,为应用提供图像输入。 4. **响应式编程**:如果...
1. **请求权限**:使用`AVCaptureDevice`的`requestAccess(forMediaType:)`方法请求访问摄像头: ```swift AVCaptureDevice.requestAccess(for: .video) { granted in if granted { // 用户已授权,可以使用...
在iOS开发中,访问本地视频库和获取摄像头视频流是两个关键功能,它们涉及到多媒体处理、用户隐私权限以及UI设计等多个方面。以下是关于这两个主题的详细讲解。 首先,**获取本地视频库** 是iOS应用中常见的一种...
UIImagePickerController是iOS平台上用于选择或拍摄图片和视频的内置组件,它是UIController的一个子类,广泛应用于各种需要用户从设备相册选取或者直接通过摄像头拍照的场景。在这个学习项目中,我们将深入探讨如何...
1. **使用UIImagePickerController** `UIImagePickerController` 是苹果提供的一个内置类,用于在iOS应用中展示相机和相册。要调用相机,首先需要创建一个`UIImagePickerController`实例,设置其`sourceType`属性为...