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. [sinatra] Sinatra再入门

    原文URL:http://www.rubycc.com/bbs/topic_detail/86 1.基础代码app.rb require 'rubygems' require 'sinatra/bas ...

  2. 雅虎工程师提供的CSS初始化代码

    body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,b ...

  3. linux计划任务运行php文件的方法

    在linux下,借助crontab,设置计划任务每天6点10分执行filename.php文件,写入一行时间到log日志中. 创建计划任务的脚本: dos2unix /path/to/filename ...

  4. Android扫描文件

    扫描文件及文件夹 package com.bwie.demo; import java.io.File; import java.io.FileFilter; import java.util.Arr ...

  5. 使用javascript判断浏览器对css3的支持情况【译】

    Quick Tip: Detect CSS3 Support in Browsers with JavaScript Jeffrey Way on Nov 15th 2010  步骤 1 首先我们要确 ...

  6. selenium学习记录

    browser = webdriver.Firefox()browser是一个WebDriver类,常用的方法有 'add_cookie',添加cookie 'back',返回上一页 'close', ...

  7. xhr dojo load

    require(["dojo/_base/xhr"], function(xhr) { // Execute a HTTP GET request xhr.get({ // The ...

  8. Web API 2 authentication with JWT

    Web API 2 authentication with JWT JSON Web Token (JWT) 使用 AngularJS & NodeJS 实现基于 token 的认证应用

  9. 【转载】Perl异常处理方法总结

    程序脚本在运行过程中,总会碰到这样那样的问题,我们会预知一些问题并为其准备好处理代码,而有一些不能预知.好的程序要能尽可能多的处理可能出现的异常问题,本文就总结了一些方法来解决这些异常,当然perl在 ...

  10. 快速搭建Redis缓存数据库

    之前一篇随笔——Redis安装及主从配置已经详细的介绍过Redis的安装于配置.本文要讲的是如何在已经安装过Redis的机器上快速的创建出一个新的Redis缓存数据库. 一.环境介绍 1) Linux ...