由于在一个程序中我们有很多地方需要上传图片,我们会通过摄像头或者是相册调取图片。如果每用到一个地方我们就重新写一次代码会造成文件的大量冗余,因此将他们进行封装到一个UIView中,只需要引入头文件,在UIViewController中使用两句代码就可以。由于代码比较多,粘贴到下面看着也会非常厌烦,因此将下载路径给出直接打开工程查看就好:http://code.cocoachina.com/view/134281
下面是UIView中的代码:
.h中的代码
#import <UIKit/UIKit.h>typedef void(^ImageBlock)(UIImage *image);@interface SZImageView : UIView@PRoperty(nonatomic,copy)ImageBlock imageBlock;+(SZImageView *)shareImageView;-(void)getFrame:(CGSize)size viewController:(id)viewController;@end
.m中的代码
#define Widthscale(scale) ((([UIScreen mainScreen].bounds.size.width) * scale) / (375))#define Heightscale(scale) ((([UIScreen mainScreen].bounds.size.height) * scale) / (667))#import "SZImageView.h"#import <MobileCoreServices/MobileCoreServices.h>@interface SZImageView()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>@property(nonatomic,strong)UINavigationController *navigation;@property(nonatomic,strong) UIView *viewbg;@property(nonatomic,strong)UIViewController *viewImageController;@end@implementation SZImageView+(SZImageView *)shareImageView{ static SZImageView *imageview = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ imageview = [[[NSBundle mainBundle]loadNibNamed:@"SZImageView" owner:nil options:nil]lastObject]; }); return imageview;}-(void )getFrame:(CGSize)size viewController:(id)viewController{ self.viewImageController = viewController; UIWindow *window = [UIapplication sharedApplication].keyWindow; window.frame = [UIScreen mainScreen].bounds; _viewbg = [[UIView alloc]initWithFrame:window.frame]; _viewbg.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.3]; [window addSubview:_viewbg]; [_viewbg addSubview:self]; self.frame = CGRectMake(0, 0,Widthscale(size.width), Heightscale(size.height)); self.center = window.center;}- (IBAction)openCamera:(UIButton*)sender { [self configImagePickerController:1];}- (IBAction)openPhoto:(UIButton*)sender { [self configImagePickerController:0];}- (IBAction)delect:(UIButton *)sender { [self delectAllView];}-(void)delectAllView{ [self removeFromSuperview]; [self.viewbg removeFromSuperview];}-(void)configImagePickerController:(NSInteger)number{ UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; //可编辑 switch (number) { case 0: //判断是否可以打开相册 if ([self isPhotoLibrary]) { picker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary; }else{ NSLog(@"无法打开相册"); return; } break; case 1: if ([self isCameravail]){ //摄像头 picker.sourceType = UIImagePickerControllerSourceTypeCamera; }else{ NSLog(@"没有摄像头"); return; } break; default: break; } [self delectAllView]; [self.viewImageController presentViewController:picker animated:YES completion:nil]; }//判断相机是否可用-(BOOL)isCameravail{ return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];}-(BOOL)isPhotoLibrary{ return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];}-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ NSString *mdeiaType = [info objectForKey:UIImagePickerControllerMediaType]; if ([mdeiaType isEqualToString:(__bridge NSString*)kUTTypeImage]) { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { SEL saveImage = @selector(ImageWasSaveSuccessfully:didFinishSavingWithError:contextInfo:); UIImageWriteToSavedPhotosAlbum(image, self, saveImage, nil); } self.imageBlock(image); }else{ } [picker dismissViewControllerAnimated:YES completion:nil]; }-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [picker dismissViewControllerAnimated:YES completion:nil];}-(void)ImageWasSaveSuccessfully:(UIImage *)paraImage didFinishSavingWithError:(NSError *)error contextInfo:(NSDictionary<NSString *,id> *)paraInfo{ if (error == nil) { NSLog(@"保存成功"); }else{ NSLog(@"%@",error); }}/* 下面的代码是一些相关的设置,如果想了解自己可以看一看 *///-(void)configImagePickerController{// // [self removeFromSuperview];// [self.viewbg removeFromSuperview];//// UIImagePickerController *controller =[[UIImagePickerController alloc]init];// // controller.sourceType = UIImagePickerControllerSourceTypeCamera;// NSString * requireMediaType = (__bridge NSString*)kUTTypeImage;// controller.mediaTypes = [[NSArray alloc]initWithObjects:requireMediaType, nil];// // controller.allowsEditing = false;// controller.delegate = self;// //打开闪光灯// controller.cameraFlashMode= UIImagePickerControllerCameraFlashModeOn;// [self.viewImageController presentViewController:controller animated:YES completion:nil];// // //}//////前置闪光灯是否可用//-(BOOL)isCameraFlashavailFront{// return [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];//}////后置闪光灯是否可用//-(BOOL)isCameraFlashavailRear{// return [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];//}//////前摄像头是否可用//-(BOOL)isCameraavailFront{// return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];//}////后置摄像头会否可用//-(BOOL)isCameraavailRear{// return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];//}////判断是否支持拍照和录像//-(BOOL)isCameraSupportMedia:(NSString *)paraMediaType//{// NSArray *avaiablemedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];// for (NSString *item in avaiablemedia) {// if ([item isEqualToString:paraMediaType]) {// return true;// }// }// return false;//}@end
ViewController中的代码
#import "ViewController.h"#import "SZImageView.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [SZImageView shareImageView].imageBlock = ^(UIImage *image){ self.imageView.image = image; };}- (IBAction)photoAlbum:(UIButton *)sender { [[SZImageView shareImageView]getFrame:CGSizeMake(200, 300) viewController:self];}- (IBAction)cameraClick:(UIButton *)sender { [[SZImageView shareImageView]getFrame:CGSizeMake(200, 300) viewController:self]; }@end
大家看看就好,只是一个粗体大框,只是提供一个思路而已,可以根据具体需求更改
新闻热点
疑难解答