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. 针对Android 模拟器启动慢的问题

    Android 模拟器一直以运行速度慢著称,可以使用intel HAXM技术为Andorid模拟器加速.使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. 1. Intel HAXM 是什么 In ...

  2. 关于archlinux下的ralink5370网卡

    驱动此网卡要使用 rt2800usb,rt2800lib 这两个模块 顺便说一下对模块进行操作的命令: rmmod 模块名 //为移除模块 insmod 模块所在路径 //为添加模块 查看网卡是否能被 ...

  3. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  4. Java笔试题解答和部分面试题

    面试类  银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...

  5. java使用ffmpeg和mencoder做视频格式转换

    首发:个人博客,持续更新和纠错 主要使用技术:1)FFmpeg,用于主流格式之间的转换,例如AVI,MP4,FLV等.2)MEncoder,用于奇葩格式转主流格式,例如RMVB转AVI.这样我们可以把 ...

  6. PHP人民币金额数字转中文大写的函数

    <?php header("Content-Type:text/html;charset=utf-8"); error_reporting(2); function cny( ...

  7. Microsoft Office 2013 Product Key

    Microsoft Office 2013 Product Key ( Professional Plus ) PGD67-JN23K-JGVWW-KTHP4-GXR9G B9GN2-DXXQC-9D ...

  8. Multi-source Replication

    MariaDB starting with 10.0.1 Multi-source replication means that one server has many masters from wh ...

  9. Hibernate,JPA注解@DynamicInsert和@DynamicUpdate,Hibernate如何插入sysdate

    @DynamicInsert属性:设置为true,设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false. ...

  10. oralce创建用户

    oralce创建用户: sqlplus /nolog回车 -->conn esun/esun@esuntech; -->create user xlh identified by pass ...