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. angularjs---$http.post发的数据,后台取不到

    我用$http.post(url, data). 后台用play框架,不知道为什么总是取不到data数据.如果直接用$.post(url, data); 就可以! 后台Play的一个action: 打 ...

  2. 夺命雷公狗---DEDECMS----7dedecms目录结构

    我们dedecms的目录结构其实只需要一张图即可明了了,如下图所示:

  3. [Ubuntu] Ubuntu搭建VPN服务器pptpd

    在 Ubuntu 上搭建 VPN 服务器的方法非常多,比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN. 这三种方式中后两者的安全性比较好,但配置较麻烦.其中 OpenVPN 在 W ...

  4. DOM4J解析xml案例

  5. Controller 接口控制器详解

    Controller 控制器,是 MVC 中的部分 C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1.收集.验证请求参数并绑定到命令对象:2.将命令对象交给业务对象,由业务对象处理并返回模 ...

  6. Oracle读书笔记

    数据区(也叫数据扩展区)由一组连续的Oracle块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个断(Segment). 数据块是Oracle逻辑存储中的最小的 ...

  7. 使用Jconsole监控weblogic的配置方法

    在项目中发现full gc非常频繁.达到了每分钟13次.我怀疑可能会有内存泄露.于是在晚上找了内存泄露的资料. 内存长期占用并导致系统不稳定一般有两种可能: 1. 对象被大量创建而且被缓存,在旧的对象 ...

  8. 4.1HTML和Bootstrap css精华

    1.HTML 2.理解Bootstrap HTML元素告诉浏览器,他要表现的是什么类型的内容,当他们不提供任何关于如何显示内容的信息.如何显示内容的信息,由CSS提供. 本书仅包含足够的信息,让你查看 ...

  9. org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet

    java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.se ...

  10. Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。

    安装 首先要在composer.json中添加: "zizaco/entrust": "5.2.x-dev" 然后运行composer install 或者 c ...