• iOS 取得单张系统图片


    这里主要用到了UIImagePickerController

    不多废话,直接上代码

      1 //
      2 //  RootViewController.m
      3 //  GetImageFromPhotoAlbum
      4 //
      5 //  Created by 王云龙 on 16/1/18.
      6 //  Copyright © 2016年 王云龙. All rights reserved.
      7 //
      8 
      9 #import "RootViewController.h"
     10 #import "SecViewController.h"
     11 
     12 @interface RootViewController ()<UIActionSheetDelegate,UINavigationControllerDelegate, UIImagePickerControllerDelegate>
     13 
     14 {
     15     UIImageView *_imageView;
     16     UIImageView *_imageViewR;
     17 }
     18 
     19 @end
     20 
     21 @implementation RootViewController
     22 
     23 
     24 /**
     25  *  1.导航器
     26  *  2.UIImagePickerController
     27  *  3.iOS文件存取,沙盒机制
     28  */
     29 
     30 - (void)viewDidLoad
     31 {
     32     [super viewDidLoad];
     33     // Do any additional setup after loading the view.
     34     
     35 #pragma mark - 导航器设置
     36     [self.navigationController.navigationBar setTranslucent:NO];//设置navigationbar的半透明
     37     NSLog(@"frame = %@,bounds = %@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.window.bounds));
     38     self.title = @"navigationcontroller";//设置navigationbar上显示的标题
     39     [self.navigationController.navigationBar setBarTintColor:[UIColor purpleColor]];//设置navigationbar的颜色
     40     
     41     UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(leftAction:)];
     42     self.navigationItem.leftBarButtonItem = left; //设置navigationbar左边按钮
     43     
     44     self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(rightAction:)];//设置navigationbar右边按钮
     45     [self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];//设置navigationbar上左右按钮字体颜色
     46     
     47 #pragma mark - 画面初始化
     48     _imageViewR = [[UIImageView alloc]initWithFrame:CGRectMake(16, 20, 100, 100)];
     49     _imageViewR.backgroundColor = [UIColor grayColor];
     50     [self.view addSubview:_imageViewR];
     51     
     52     _imageView = [[UIImageView alloc]initWithFrame:CGRectMake(16, 140, self.view.frame.size.width-32, self.view.frame.size.width-32)];
     53     _imageView.backgroundColor = [UIColor grayColor];
     54     [self.view addSubview:_imageView];
     55     
     56     UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
     57     btn.frame = CGRectMake(16, CGRectGetMaxY(_imageView.frame)+20, self.view.frame.size.width-32, 35);
     58     btn.layer.cornerRadius = 5;
     59     btn.layer.masksToBounds = YES;
     60     [btn setTitle:@"获取相册图片" forState:UIControlStateNormal];
     61     [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
     62     [self.view addSubview:btn];
     63     
     64 }
     65 
     66 #pragma mark - 导航控制器的跳转
     67 -(void)leftAction:(UIBarButtonItem*)sender{
     68     //只能跳到没有没有导航控制器的controller
     69     SecViewController *secVC = [[SecViewController alloc]init];
     70     [self.navigationController pushViewController:secVC animated:YES];
     71 }
     72 
     73 -(void)rightAction:(UIBarButtonItem*)sender{
     74     //相册
     75     UIImagePickerController *imagePickController = [[UIImagePickerController alloc]init];
     76     imagePickController.delegate = self;
     77     imagePickController.allowsEditing = YES;
     78     imagePickController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
     79     [self presentViewController:imagePickController animated:YES completion:nil
     80      ];
     81     
     82     
     83 }
     84 
     85 #pragma mark - 相册中取得图片并显示
     86 -(void)btnAction:(UIButton*)sender{
     87     
     88     UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"获取图片" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
     89     
     90     //判断支持类型
     91     //相册和图库的区别
     92     //http://zhidao.baidu.com/link?url=DGZvUPsBPpArTyqP5ff2BcbVL1s_OUuH9A4TfB3Bn0xTP_iylo7Y45wAShBGZXDW85cicNPaeXSQlLiPzYCvCbDmA9gPHX5042sNfrN5ZFu
     93     
     94     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
     95         NSLog(@"支持相机");
     96     else
     97         NSLog(@"不支持相机");
     98     
     99     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    100         NSLog(@"支持图库");
    101     else
    102         NSLog(@"不支持图库");
    103     
    104     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    105         NSLog(@"支持相册");
    106     else
    107         NSLog(@"不支持相册");
    108     
    109     
    110     
    111     //判断是否支持相机
    112     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    113         UIAlertAction*defualtAction = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    114             UIImagePickerController *imagePickerController = [[UIImagePickerController alloc]init];
    115             imagePickerController.delegate = self;
    116             imagePickerController.allowsEditing = YES;
    117             imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    118             [self presentViewController:imagePickerController animated:YES completion:^{}];
    119         }];
    120         [alertController addAction:defualtAction];
    121     }
    122     UIAlertAction *defaultAction1 = [UIAlertAction actionWithTitle:@"从相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    123         //相册
    124         UIImagePickerController *imagePickController = [[UIImagePickerController alloc]init];
    125         imagePickController.delegate = self;
    126         imagePickController.allowsEditing = YES;
    127         imagePickController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    128         [self presentViewController:imagePickController animated:YES completion:nil
    129          ];
    130         
    131     }];
    132     UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    133     [alertController addAction:cancelAction];
    134     [alertController addAction:defaultAction1];
    135     
    136     //弹出视图
    137     [self presentViewController:alertController animated:YES completion:nil];
    138     
    139 }
    140 
    141 #pragma mark - 文件保存到本地
    142 //http://blog.csdn.net/jianjianyuer/article/details/8556024
    143 -(void)saveImage:(UIImage*)currentImage withName:(NSString*)name{
    144     //图片读取的两个方法
    145     //http://blog.csdn.net/lovenjoe/article/details/7484217
    146     //NSData存储二进制数据
    147     //http://blog.csdn.net/jjmm2009/article/details/39004149
    148     NSData *imageData = UIImagePNGRepresentation(currentImage);
    149     
    150     //沙盒介绍
    151     //http://www.cnblogs.com/taintain1984/archive/2013/03/19/2969201.html
    152     NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]stringByAppendingPathComponent:name];
    153     
    154     //沙盒文件操作
    155     //http://www.cocoachina.com/bbs/read.php?tid-78784.html
    156     
    157     //将图片写入
    158     [imageData writeToFile:fullPath atomically:YES];
    159 }
    160 
    161 #pragma mark - UIImagePickerController的代理方法。
    162 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    163     
    164     [picker dismissViewControllerAnimated:YES completion:nil];
    165     //得到原始图片,未编辑的
    166     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    167     
    168     //判断是否图片已经读取过
    169     NSString*referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    170     NSLog(@"%@",referenceURL);
    171     //保存图片到本地
    172     //文件名为时间戳,防止重名
    173     NSDate *datenow = [NSDate date];
    174     NSString *timeSp = [NSString stringWithFormat:@"%lf",[datenow timeIntervalSince1970]];
    175     NSString *fileName = [NSString stringWithFormat:@"%@.png",timeSp];
    176     
    177     [self saveImage:image withName:fileName];
    178     
    179     NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]stringByAppendingPathComponent:fileName];
    180     
    181     
    182     UIImage *saveImage = [[UIImage alloc]initWithContentsOfFile:fullPath];
    183 
    184     //设置图片显示
    185     [_imageView setImage:saveImage];
    186     [_imageViewR setImage:image];
    187 }
    188 
    189 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    190     [picker dismissViewControllerAnimated:YES completion:nil];
    191 }
    192 
    193 
    194 - (void)didReceiveMemoryWarning {
    195     [super didReceiveMemoryWarning];
    196     // Dispose of any resources that can be recreated.
    197 }
    198 
    199 
    200 @end
    取得图片的代码

    注意点

    需要设置的三个重要属性

    delegate:代理,必须设置,否则选择图片后页面跳转不会来,也取不到选取的图片

    allowEditing:最好设置为yes,否则看不到原图,只能在图片墙上选取图片

    souceType:图片来源,有三个,照片流,图库,相机,区别和用法请参考代码

    两个重要的代理方法

    请参考代码,但是两个代理方法中都要写模态跳转,系统是不会自己跳回来的。

  • 相关阅读:
    通用js模块02:validutils.js
    通用js模块04:cookieUtils.js
    通用js模块03:formatutils.js
    通用js模块01:stringutils.js
    应用开发平台与代码生成工具感想
    linq to sql 中isnumeric的使用
    很惭愧啊
    错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
    今天又温习了一下磁盘阵列的概念
    ashx的说明
  • 原文地址:https://www.cnblogs.com/ieso-ios/p/5161215.html
Copyright © 2020-2023  润新知