//
// HYBPhotoPickerManager.h
// ehui
//
// Created by 黄仪标 on 14/11/26.
// Copyright (c) 2014年 黄仪标. All rights reserved.
//#import <Foundation/Foundation.h>/*!* @brief 照片获取或者拍照功能管理器* @author huangyibiao*/
@interface HYBPhotoPickerManager : NSObject + (HYBPhotoPickerManager *)shared;/*!* @brief 选择图片或者拍照完成选择使用拍照的图片后,会调用此block* @param image 选择的图片或者拍照后选择使用的图片*/
typedef void (^HYBPickerCompelitionBlock)(UIImage *image);
/*!* @brief 用户点击取消时的回调block*/
typedef void (^HYBPickerCancelBlock)();/*!* @brief 此方法为调起选择图片或者拍照的入口,当选择图片或者拍照后选择使用图片后,回调completion,* 当用户点击取消后,回调cancelBlock* @param inView UIActionSheet呈现到inView这个视图上* @param fromController 用于呈现UIImagePickerController的控制器* @param completion 当选择图片或者拍照后选择使用图片后,回调completion* @param cancelBlock 当用户点击取消后,回调cancelBlock*/
- (void)showActionSheetInView:(UIView *)inViewfromController:(UIViewController *)fromControllercompletion:(HYBPickerCompelitionBlock)completioncancelBlock:(HYBPickerCancelBlock)cancelBlock;@end
//
// HYBPhotoPickerManager.m
// ehui
//
// Created by 黄仪标 on 14/11/26.
// Copyright (c) 2014年 黄仪标. All rights reserved.
//#import "HYBPhotoPickerManager.h"
#import "UIImagePickerController+Photo.h"
#import "UIImage+DSResizeAndRound.h"@interface HYBPhotoPickerManager () <UIImagePickerControllerDelegate,
UINavigationControllerDelegate,
UIActionSheetDelegate>@property (nonatomic, weak) UIViewController *fromController;
@property (nonatomic, copy) HYBPickerCompelitionBlock completion;
@property (nonatomic, copy) HYBPickerCancelBlock cancelBlock;@end@implementation HYBPhotoPickerManager+ (HYBPhotoPickerManager *)shared {static HYBPhotoPickerManager *sharedObject = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{if (!sharedObject) {sharedObject = [[[self class] alloc] init];}});return sharedObject;
}- (void)showActionSheetInView:(UIView *)inViewfromController:(UIViewController *)fromControllercompletion:(HYBPickerCompelitionBlock)completioncancelBlock:(HYBPickerCancelBlock)cancelBlock {self.completion = [completion copy];self.cancelBlock = [cancelBlock copy];self.fromController = fromController;dispatch_async(kGlobalThread, ^{UIActionSheet *actionSheet = nil;if ([UIImagePickerController isCameraAvailable]) {actionSheet = [[UIActionSheet alloc] initWithTitle:nildelegate:(id<UIActionSheetDelegate>)selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:@"从相册选择", @"拍照上传", nil];} else {actionSheet = [[UIActionSheet alloc] initWithTitle:nildelegate:(id<UIActionSheetDelegate>)selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:@"从相册选择", nil];}dispatch_async(kMainThread, ^{[actionSheet showInView:inView];});});return;
}#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {if (buttonIndex == 0) { // 从相册选择if ([UIImagePickerController isPhotoLibraryAvailable]) {UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType];if (kIsIOS7OrLater) {picker.navigationBar.barTintColor = self.fromController.navigationController.navigationBar.barTintColor;}// 设置导航默认标题的颜色及字体大小picker.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],NSFontAttributeName : [UIFont boldSystemFontOfSize:18]};[self.fromController presentViewController:picker animated:YES completion:nil];}} else if (buttonIndex == 1) { // 拍照if ([UIImagePickerController canTakePhoto]) {UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;picker.sourceType = UIImagePickerControllerSourceTypeCamera;picker.delegate = self;if (kIsIOS7OrLater) {picker.navigationBar.barTintColor = self.fromController.navigationController.navigationBar.barTintColor;}// 设置导航默认标题的颜色及字体大小picker.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],NSFontAttributeName : [UIFont boldSystemFontOfSize:18]};[self.fromController presentViewController:picker animated:YES completion:nil];}}return;
}#pragma mark - UIImagePickerControllerDelegate
// 选择了图片或者拍照了
- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {[aPicker dismissViewControllerAnimated:YES completion:nil];__block UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];if (image && self.completion) {[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];[self.fromController setNeedsStatusBarAppearanceUpdate];dispatch_async(kGlobalThread, ^{image = [image imageResizedToSize:CGSizeMake(kScreenWidth / 2.0, kScreenHeight / 2.0)];DDLogVerbose(@"image size : %@", NSStringFromCGSize(image.size));dispatch_async(kMainThread, ^{self.completion(image);});});}return;
}// 取消
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)aPicker {[aPicker dismissViewControllerAnimated:YES completion:nil];if (self.cancelBlock) {[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];[self.fromController setNeedsStatusBarAppearanceUpdate];self.cancelBlock();}return;
}@end