1. //
  2. //  HYBPhotoPickerManager.h
  3. //  ehui
  4. //
  5. //  Created by 黄仪标 on 14/11/26.
  6. //  Copyright (c) 2014年 黄仪标. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. /*!
  10. * @brief 照片获取或者拍照功能管理器
  11. * @author huangyibiao
  12. */
  13. @interface HYBPhotoPickerManager : NSObject
  14. + (HYBPhotoPickerManager *)shared;
  15. /*!
  16. * @brief 选择图片或者拍照完成选择使用拍照的图片后,会调用此block
  17. * @param image 选择的图片或者拍照后选择使用的图片
  18. */
  19. typedef void (^HYBPickerCompelitionBlock)(UIImage *image);
  20. /*!
  21. * @brief 用户点击取消时的回调block
  22. */
  23. typedef void (^HYBPickerCancelBlock)();
  24. /*!
  25. * @brief 此方法为调起选择图片或者拍照的入口,当选择图片或者拍照后选择使用图片后,回调completion,
  26. *        当用户点击取消后,回调cancelBlock
  27. * @param inView UIActionSheet呈现到inView这个视图上
  28. * @param fromController 用于呈现UIImagePickerController的控制器
  29. * @param completion 当选择图片或者拍照后选择使用图片后,回调completion
  30. * @param cancelBlock 当用户点击取消后,回调cancelBlock
  31. */
  32. - (void)showActionSheetInView:(UIView *)inView
  33. fromController:(UIViewController *)fromController
  34. completion:(HYBPickerCompelitionBlock)completion
  35. cancelBlock:(HYBPickerCancelBlock)cancelBlock;
  36. @end
    1. //
    2. //  HYBPhotoPickerManager.m
    3. //  ehui
    4. //
    5. //  Created by 黄仪标 on 14/11/26.
    6. //  Copyright (c) 2014年 黄仪标. All rights reserved.
    7. //
    8. #import "HYBPhotoPickerManager.h"
    9. #import "UIImagePickerController+Photo.h"
    10. #import "UIImage+DSResizeAndRound.h"
    11. @interface HYBPhotoPickerManager () <UIImagePickerControllerDelegate,
    12. UINavigationControllerDelegate,
    13. UIActionSheetDelegate>
    14. @property (nonatomic, weak)     UIViewController          *fromController;
    15. @property (nonatomic, copy)     HYBPickerCompelitionBlock completion;
    16. @property (nonatomic, copy)     HYBPickerCancelBlock      cancelBlock;
    17. @end
    18. @implementation HYBPhotoPickerManager
    19. + (HYBPhotoPickerManager *)shared {
    20. static HYBPhotoPickerManager *sharedObject = nil;
    21. static dispatch_once_t onceToken;
    22. dispatch_once(&onceToken, ^{
    23. if (!sharedObject) {
    24. sharedObject = [[[self class] alloc] init];
    25. }
    26. });
    27. return sharedObject;
    28. }
    29. - (void)showActionSheetInView:(UIView *)inView
    30. fromController:(UIViewController *)fromController
    31. completion:(HYBPickerCompelitionBlock)completion
    32. cancelBlock:(HYBPickerCancelBlock)cancelBlock {
    33. self.completion = [completion copy];
    34. self.cancelBlock = [cancelBlock copy];
    35. self.fromController = fromController;
    36. dispatch_async(kGlobalThread, ^{
    37. UIActionSheet *actionSheet = nil;
    38. if ([UIImagePickerController isCameraAvailable]) {
    39. actionSheet  = [[UIActionSheet alloc] initWithTitle:nil
    40. delegate:(id<UIActionSheetDelegate>)self
    41. cancelButtonTitle:@"取消"
    42. destructiveButtonTitle:nil
    43. otherButtonTitles:@"从相册选择", @"拍照上传", nil nil];
    44. } else {
    45. actionSheet = [[UIActionSheet alloc] initWithTitle:nil
    46. delegate:(id<UIActionSheetDelegate>)self
    47. cancelButtonTitle:@"取消"
    48. destructiveButtonTitle:nil
    49. otherButtonTitles:@"从相册选择", nil nil];
    50. }
    51. dispatch_async(kMainThread, ^{
    52. [actionSheet showInView:inView];
    53. });
    54. });
    55. return;
    56. }
    57. #pragma mark - UIActionSheetDelegate
    58. - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    59. if (buttonIndex == 0) { // 从相册选择
    60. if ([UIImagePickerController isPhotoLibraryAvailable]) {
    61. UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    62. picker.delegate = self;
    63. picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    64. picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType];
    65. if (kIsIOS7OrLater) {
    66. picker.navigationBar.barTintColor = self.fromController.navigationController.navigationBar.barTintColor;
    67. }
    68. // 设置导航默认标题的颜色及字体大小
    69. picker.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
    70. NSFontAttributeName : [UIFont boldSystemFontOfSize:18]};
    71. [self.fromController presentViewController:picker animated:YES completion:nil];
    72. }
    73. } else if (buttonIndex == 1) { // 拍照
    74. if ([UIImagePickerController canTakePhoto]) {
    75. UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    76. picker.delegate = self;
    77. picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    78. picker.delegate = self;
    79. if (kIsIOS7OrLater) {
    80. picker.navigationBar.barTintColor = self.fromController.navigationController.navigationBar.barTintColor;
    81. }
    82. // 设置导航默认标题的颜色及字体大小
    83. picker.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
    84. NSFontAttributeName : [UIFont boldSystemFontOfSize:18]};
    85. [self.fromController presentViewController:picker animated:YES completion:nil];
    86. }
    87. }
    88. return;
    89. }
    90. #pragma mark - UIImagePickerControllerDelegate
    91. // 选择了图片或者拍照了
    92. - (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    93. [aPicker dismissViewControllerAnimated:YES completion:nil];
    94. __block UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
    95. if (image && self.completion) {
    96. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    97. [self.fromController setNeedsStatusBarAppearanceUpdate];
    98. dispatch_async(kGlobalThread, ^{
    99. image = [image imageResizedToSize:CGSizeMake(kScreenWidth / 2.0, kScreenHeight / 2.0)];
    100. DDLogVerbose(@"image size : %@", NSStringFromCGSize(image.size));
    101. dispatch_async(kMainThread, ^{
    102. self.completion(image);
    103. });
    104. });
    105. }
    106. return;
    107. }
    108. // 取消
    109. - (void)imagePickerControllerDidCancel:(UIImagePickerController *)aPicker {
    110. [aPicker dismissViewControllerAnimated:YES completion:nil];
    111. if (self.cancelBlock) {
    112. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    113. [self.fromController setNeedsStatusBarAppearanceUpdate];
    114. self.cancelBlock();
    115. }
    116. return;
    117. }
    118. @end

ios照片获取,拍照功能的更多相关文章

  1. 文件件监听器,android系统拍照功能调用后删除系统生成的照片

    先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...

  2. Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决

    使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...

  3. Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片

    Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一 ...

  4. iOS开源项目MobileProject功能点介绍

    一:MobileProject简介 MobileProject项目是一个以MVC模式搭建的开源功能集合,基于Objective-C上面进行编写,意在解决新项目对于常见功能模块的重复开发,MobileP ...

  5. Android--启动拍照功能并返回结果

    因为没有深入学习拍照这块功能,所以只是简单的调用了一下系统的拍照功能,下面代码: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下s ...

  6. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  7. Android使得手机拍照功能的发展(源共享)

    Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...

  8. 微信小程序(有始有终,全部代码)开发--- 新增模块: 图片选取以及拍照功能

    开篇语 前几天发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本: 简年18: 微信小程序(有始有终,全部代码)开发 ...

  9. 移动端js调取手机相册和拍照功能

    前端可以通过js调取手机的相册和拍照功能,但不能拍视频!!! <!DOCTYPE html> <html lang="en"> <head> & ...

随机推荐

  1. LIKE 某个变量

    declare i ); n number; begin i:='%D0FC02EAR11005%'; select po_header_id into n from po_headers_all w ...

  2. Web服务器处理HTTP压缩之gzip、deflate压缩

    现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能.   目录 一.什么是gzip 二.什么是de ...

  3. java 网络编程(四)----UDP进阶篇聊天小程序

    设计要求:单线程模式,客户端只发送数据,数据的来源为键盘录入,服务器端只接收数据,当客户端发送886的时候,客户端和服务器端都退出. 1. 发送端: public class Send impleme ...

  4. php+jquery注册实例

    写了一个简单的PHP+jQuery注册模块,需要填写的栏目包括用户名.邮箱.密码.重复密码和验证码,其中每个栏目需要具备的功能和要求如下图: 在做这个模块的时候,很大程度上借鉴了网易注册( http: ...

  5. Python for z/OS

    Install pythondev Install DB2 or server driver package easy_install ibm_db Get license file from tor ...

  6. 使用 TC 对LInux中vpn 上传下载进行限速(转)

    TC 无需安装,Linux 内核自带 例:将vpn IP地址段192.168.1.0/24 上传下载限速为 5M 将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbi ...

  7. 使用 Delphi Xe 的 TDictionary

    原本一直使用 TList, 将定义的一个个 Record 保存在TList 里面, 为了能把某些对象管理起来, 例如一个类的 n 多实例,可以进行索引.查找.释放等 今天刚看到原来已经有了一个叫 TD ...

  8. php删除多重数组对象属性,重新赋值的方法

    php删除多重数组对象属性,重新赋值的方法 实例:sphinx搜索出来的结果,要去掉某个属性值:$cl = new SphinxClient ();$query = $cl->Query ( $ ...

  9. va_list/va_start/va_arg/va_end深入分析【转】

    转自:http://www.cnblogs.com/justinzhang/archive/2011/09/29/2195969.html va_list/va_start/va_arg/va_end ...

  10. spin_lock、spin_lock_irq、spin_lock_irqsave区别【转】

    转自:http://blog.csdn.net/luckywang1103/article/details/42083613 void spin_lock(spinlock_t *lock); voi ...