在iOS设备(iPhone/iPad)中调用摄像头进行全屏拍摄时的处理方案
2013-12-04 14:54
573 查看
在实际开发中,UIImagePickerController的调用在iPhone和iPad的中是有些许差异的,因为两者设备间的固有的的差距,在iPhone中调用照片库中的图片可以直接进行
首先应当遵循UIImagePickerControllerDelegate协议
调用即可
但是在iPad开发中由于屏幕大,如果是在一个小的View中调用需要遵循UIImagePickerControllerDelegate,UIPopoverControllerDelegate三个协议,并通过UIPopoverControllerView调用UIImagePickerControlle
当需要调用摄像头时,如果需要的是非全屏的调用那么跟调用照片库的区别不大
当然,如果大部分情况下使用摄像头进行拍摄时,都喜欢使用全屏,不但看起来比较酷,在苹果官方API中也是提倡的
首先,如果你调用摄像头的语句没有写在ViewController中,那么需要通过代理或者通知中心将事件转到ViewController中然后遵循UIImagePickerControllerDelegate,UINavigationControllerDelegate两个协议
同时应当事先协议中的两个函数
首先应当遵循UIImagePickerControllerDelegate协议
UIImagePickerController * picker = [[UIImagePickerController alloc]init]; if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate = self; [picker setAllowsEditing:YES]; }else{ UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil]; [alert show]; [alert release]; }
调用即可
但是在iPad开发中由于屏幕大,如果是在一个小的View中调用需要遵循UIImagePickerControllerDelegate,UIPopoverControllerDelegate三个协议,并通过UIPopoverControllerView调用UIImagePickerControlle
UIImagePickerController * picker = [[UIImagePickerController alloc]init]; if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate = self; [picker setAllowsEditing:YES]; UIPopoverController * popver = [[UIPopoverController alloc]initWithContentViewController:picker]; self.popverController = popver; [self.popverController setPopoverContentSize:CGSizeMake(300, 500)]; [self.popverController presentPopoverFromRect:CGRectMake(103, 30, 59, 59) inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; [popver release]; } else{ UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil]; [alert show]; [alert release]; }
当需要调用摄像头时,如果需要的是非全屏的调用那么跟调用照片库的区别不大
//以浮动窗口的形式打开摄像头 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController * picker = [[UIImagePickerController alloc]init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.allowsEditing = YES; picker.modalPresentationStyle = UIModalPresentationCurrentContext; UIPopoverController * popver = [[UIPopoverController alloc]initWithContentViewController:picker]; self.popverController = popver; picker.videoQuality = UIImagePickerControllerQualityTypeIFrame1280x720; picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, 0.8, 1.0); [self.popverController setPopoverContentSize:CGSizeMake(500, 800)]; [self.popverController presentPopoverFromRect:CGRectMake(103, 30, 59, 59) inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; [popver release]; }else{ UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"错误" message:@"拍照功能暂时无法使用" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show]; [alert release]; }
当然,如果大部分情况下使用摄像头进行拍摄时,都喜欢使用全屏,不但看起来比较酷,在苹果官方API中也是提倡的
首先,如果你调用摄像头的语句没有写在ViewController中,那么需要通过代理或者通知中心将事件转到ViewController中然后遵循UIImagePickerControllerDelegate,UINavigationControllerDelegate两个协议
#pragma mark - selectCamera -(void)selectCamera{ [self startCameraControllerFromViewController: self usingDelegate: self]; } - (BOOL) startCameraControllerFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate { 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 = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; // Hides the controls for moving & scaling pictures, or for // trimming movies. To instead show the controls, use YES. cameraUI.allowsEditing = YES; cameraUI.delegate = delegate; [controller presentModalViewController: cameraUI animated: YES]; return YES; }
同时应当事先协议中的两个函数
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker { //点击取消按钮时要实现的功能 [picker dismissModalViewControllerAnimated: YES]; [picker release]; } - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info { }//点击选取的图片后应当实现的内容,info中包含有选取图片的内容,通过其中的内容可以获取选择的照片
相关文章推荐
- iOS 对iphone和 ipad的摄像头和图片库的区别处理代码
- 【iOS奇葩特性】layoutSubviews在iPhone和iPad中,当设备方向改变后的调用情况
- ipad iphone ios系统设备忘记密码如何修复 如何进入恢复模式
- 获取iOS设备型号iphone ipad
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- 如果你想在 iOS 设备(iPhone/iPad/iTouch)上调试, 需要有 iOS 开发证书和
- IOS:关于iPhone/iPad全屏截图与区域截图的几种方法总结
- ios 区分iphone ipod & ipad的方法及获取设备名称。
- iOS 判断设备为iPhone还是iPad
- (iPhone/iPad开发)在iOS设备上实现摇晃手机体验的相关功能
- iPhone开发 调用摄像头进行拍照等操作
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- 如何将音视频发布到移动设备,android,ios,iphone,ipad等
- 已经越狱的 iPhone、iPad 设备,当通过其自带的 safari 浏览器访问 ipa 应用下载网站时,利用 itms-services 协议,可以一键安装 ipa 文件的 iOS 应用
- ios学习--iPhone/ipod摄像头设备获取
- Unity3D调用iOS摄像头全屏旋转,ZXing测试
- ios(iphone/ipad)一个简单的用代码判断当前设备的方法
- ios判断设备是iphone还是ipad
- 如何将音视频发布到移动设备,android,ios,iphone,ipad等