iOS开发从相册选择照片或拍照
<p>一行代码搞定图片选择</p><div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">gzhPhotoManager.h
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">图片选择
</span><span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Created by 郭志贺 on 2020/5/26.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Copyright © 2020 郭志贺. All rights reserved.
</span><span style="color: rgba(0, 128, 0, 1)">//
</span>
<span style="color: rgba(0, 0, 255, 1)">#import</span> <Foundation/Foundation.h>
<span style="color: rgba(0, 0, 255, 1)">#import</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ViewController.h</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
NS_ASSUME_NONNULL_BEGIN
</span><span style="color: rgba(0, 0, 255, 1)">@protocol</span><span style="color: rgba(0, 0, 0, 1)"> gzhPhotoManagerDelegate;
</span><span style="color: rgba(0, 0, 255, 1)">@interface</span><span style="color: rgba(0, 0, 0, 1)"> gzhPhotoManager : NSObject
</span>+<span style="color: rgba(0, 0, 0, 1)">(instancetype)instance;
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 选择图片
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> @param controller 当前控制器
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> @param target 代理
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> @param pSize 选择照片尺寸 尺寸传(0,0)不进行裁剪</span>
- (<span style="color: rgba(0, 0, 255, 1)">void</span>)selectPhotoWithController:(UIViewController *)controller <span style="color: rgba(0, 0, 255, 1)">delegate</span>:(<span style="color: rgba(0, 0, 255, 1)">id</span><span style="color: rgba(0, 0, 0, 1)">)target size:(CGSize)pSize;
</span><span style="color: rgba(0, 0, 255, 1)">@end</span>
<span style="color: rgba(0, 0, 255, 1)">@protocol</span> gzhPhotoManagerDelegate <NSObject>
- (<span style="color: rgba(0, 0, 255, 1)">void</span>)selectedPhotoImage:(UIImage *<span style="color: rgba(0, 0, 0, 1)">)image;
</span><span style="color: rgba(0, 0, 255, 1)">@end</span><span style="color: rgba(0, 0, 0, 1)">
NS_ASSUME_NONNULL_END</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">gzhPhotoManager.m
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">图片选择
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Created by 郭志贺 on 2020/5/26.
</span><span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Copyright © 2020 郭志贺. All rights reserved.
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 128, 0, 1)">//
</span><span style="color: rgba(0, 128, 128, 1)">8</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gzhPhotoManager.h</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <MobileCoreServices/MobileCoreServices.h>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <Photos/Photos.h>
<span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <AssetsLibrary/AssetsLibrary.h>
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <MetalPerformanceShaders/MetalPerformanceShaders.h>
<span style="color: rgba(0, 128, 128, 1)"> 14</span>
<span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 255, 1)">@interface</span> gzhPhotoManager () <UINavigationControllerDelegate,UIImagePickerControllerDelegate>
<span style="color: rgba(0, 128, 128, 1)"> 16</span>
<span style="color: rgba(0, 128, 128, 1)"> 17</span> @property (nonatomic, weak) <span style="color: rgba(0, 0, 255, 1)">id</span><gzhPhotoManagerDelegate> <span style="color: rgba(0, 0, 255, 1)">delegate</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)">@property (nonatomic, assign) CGSize photoSize;
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span> @property (nonatomic, strong) UIImage *<span style="color: rgba(0, 0, 0, 1)">image;
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> @property (nonatomic, weak) UIViewController *<span style="color: rgba(0, 0, 0, 1)">controller;
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> @property (nonatomic, strong) UIImagePickerController *<span style="color: rgba(0, 0, 0, 1)">imagePickerController;
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span>
<span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 255, 1)">@end</span>
<span style="color: rgba(0, 128, 128, 1)"> 24</span>
<span style="color: rgba(0, 128, 128, 1)"> 25</span>
<span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 255, 1)">@implementation</span><span style="color: rgba(0, 0, 0, 1)"> gzhPhotoManager
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span> +<span style="color: rgba(0, 0, 0, 1)"> (instancetype)instance {
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span> <span style="color: rgba(0, 0, 255, 1)">static</span> gzhPhotoManager * shareInstance =<span style="color: rgba(0, 0, 0, 1)"> nil;
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> dispatch_once_t onceToken;
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span> dispatch_once(&onceToken, ^<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> shareInstance =<span style="color: rgba(0, 0, 0, 1)"> [init];
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)"> });
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> shareInstance;
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> -(<span style="color: rgba(0, 0, 255, 1)">void</span>)selectPhotoWithController:(UIViewController *)controller <span style="color: rgba(0, 0, 255, 1)">delegate</span>:(<span style="color: rgba(0, 0, 255, 1)">id</span><span style="color: rgba(0, 0, 0, 1)">)target size:(CGSize)pSize{
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>
<span style="color: rgba(0, 128, 128, 1)"> 38</span> _controller =<span style="color: rgba(0, 0, 0, 1)"> controller;
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> _delegate =<span style="color: rgba(0, 0, 0, 1)"> target;
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span> _photoSize =<span style="color: rgba(0, 0, 0, 1)"> pSize;
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span> UIAlertController *alertVC =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span> ];
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> [alertVC addAction:[UIAlertAction actionWithTitle:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">拍照</span><span style="color: rgba(128, 0, 0, 1)">"</span> style:UIAlertActionStyleDefault handler:^(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)"> _Nonnull action) {
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span> <span style="color: rgba(0, 0, 0, 1)"> }]];
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> [alertVC addAction:[UIAlertAction actionWithTitle:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">从手机相册中选择</span><span style="color: rgba(128, 0, 0, 1)">"</span> style:UIAlertActionStyleDefault handler:^(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)"> _Nonnull action) {
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span>
<span style="color: rgba(0, 128, 128, 1)"> 50</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span> <span style="color: rgba(0, 0, 0, 1)"> }]];
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> -(<span style="color: rgba(0, 0, 255, 1)">void</span>)cameraCheck:(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)">)action{
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span> <span style="color: rgba(0, 128, 0, 1)">/*</span>
<span style="color: rgba(0, 128, 128, 1)"> 56</span> <span style="color: rgba(0, 128, 0, 1)"> AVAuthorizationStatusNotDetermined = 0,// 系统还未知是否访问,第一次开启相机时
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>
<span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 128, 0, 1)"> AVAuthorizationStatusRestricted, // 受限制的
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>
<span style="color: rgba(0, 128, 128, 1)"> 60</span> <span style="color: rgba(0, 128, 0, 1)"> AVAuthorizationStatusDenied, //不允许
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>
<span style="color: rgba(0, 128, 128, 1)"> 62</span> <span style="color: rgba(0, 128, 0, 1)"> AVAuthorizationStatusAuthorized // 允许状态
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 64</span>
<span style="color: rgba(0, 128, 128, 1)"> 65</span> ALAuthorizationStatus author =<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (author == AVAuthorizationStatusRestricted || author ==<span style="color: rgba(0, 0, 0, 1)">AVAuthorizationStatusDenied) {
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span> }<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (author ==<span style="color: rgba(0, 0, 0, 1)"> AVAuthorizationStatusAuthorized){
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span> }<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (author ==<span style="color: rgba(0, 0, 0, 1)"> AVAuthorizationStatusNotDetermined){
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span> [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^<span style="color: rgba(0, 0, 0, 1)">(BOOL granted) {
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>
<span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (granted) {
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>
<span style="color: rgba(0, 128, 128, 1)"> 75</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">允许访问</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span> }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许访问</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span> <span style="color: rgba(0, 0, 0, 1)"> }];
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>
<span style="color: rgba(0, 128, 128, 1)"> 86</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断是否有权限访问相簿</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span>)phAuthorizationCheck:(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)">)action{
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span> <span style="color: rgba(0, 128, 0, 1)">/*</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span> <span style="color: rgba(0, 128, 0, 1)"> PHAuthorizationStatusNotDetermined, 用户还没有做出选择
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span> <span style="color: rgba(0, 128, 0, 1)"> PHAuthorizationStatusDenied, 用户拒绝当前应用访问相册(用户当初点击了"不允许")
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span> <span style="color: rgba(0, 128, 0, 1)"> PHAuthorizationStatusAuthorized 用户允许当前应用访问相册(用户当初点击了"好")
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span> <span style="color: rgba(0, 128, 0, 1)"> PHAuthorizationStatusRestricted, 因为家长控制, 导致应用无法方法相册(跟用户的选择没有关系)
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 97</span>
<span style="color: rgba(0, 128, 128, 1)"> 98</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 判断授权状态</span>
<span style="color: rgba(0, 128, 128, 1)"> 99</span> PHAuthorizationStatus statu =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">100</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (statu ==<span style="color: rgba(0, 0, 0, 1)"> PHAuthorizationStatusRestricted) {
</span><span style="color: rgba(0, 128, 128, 1)">101</span> NSLog(<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">无法访问相簿--PHAuthorizationStatusRestricted</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">102</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">103</span> } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (statu ==<span style="color: rgba(0, 0, 0, 1)"> PHAuthorizationStatusDenied) {
</span><span style="color: rgba(0, 128, 128, 1)">104</span> NSLog(<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">无法访问相簿--PHAuthorizationStatusDenied</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">105</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">106</span> } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (statu ==<span style="color: rgba(0, 0, 0, 1)"> PHAuthorizationStatusAuthorized) {
</span><span style="color: rgba(0, 128, 128, 1)">107</span> NSLog(<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">可以访问相簿--PHAuthorizationStatusAuthorized</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">108</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">109</span> } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (statu ==<span style="color: rgba(0, 0, 0, 1)"> PHAuthorizationStatusNotDetermined) {
</span><span style="color: rgba(0, 128, 128, 1)">110</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 弹框请求用户授权</span>
<span style="color: rgba(0, 128, 128, 1)">111</span> NSLog(<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">第一次访问--PHAuthorizationStatusNotDetermined</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">112</span> [PHPhotoLibrary requestAuthorization:^<span style="color: rgba(0, 0, 0, 1)">(PHAuthorizationStatus status) {
</span><span style="color: rgba(0, 128, 128, 1)">113</span>
<span style="color: rgba(0, 128, 128, 1)">114</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (status ==<span style="color: rgba(0, 0, 0, 1)"> PHAuthorizationStatusAuthorized) {
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">116</span> }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">117</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">119</span>
<span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 0, 1)"> }];
</span><span style="color: rgba(0, 128, 128, 1)">121</span>
<span style="color: rgba(0, 128, 128, 1)">122</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">123</span>
<span style="color: rgba(0, 128, 128, 1)">124</span>
<span style="color: rgba(0, 128, 128, 1)">125</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">126</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 拍照</span>
<span style="color: rgba(0, 128, 128, 1)">127</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span>)selectCamera:(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)">)action {
</span><span style="color: rgba(0, 128, 128, 1)">128</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">129</span> dispatch_async(dispatch_get_main_queue(), ^<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">130</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">131</span> <span style="color: rgba(0, 0, 0, 1)"> });
</span><span style="color: rgba(0, 128, 128, 1)">132</span>
<span style="color: rgba(0, 128, 128, 1)">133</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">134</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">135</span>
<span style="color: rgba(0, 128, 128, 1)">136</span>
<span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">_imagePickerController) {
</span><span style="color: rgba(0, 128, 128, 1)">138</span> _imagePickerController = ;
</span><span style="color: rgba(0, 128, 128, 1)">139</span> _imagePickerController.<span style="color: rgba(0, 0, 255, 1)">delegate</span> =<span style="color: rgba(0, 0, 0, 1)"> self;
</span><span style="color: rgba(0, 128, 128, 1)">140</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">141</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (_photoSize.width!=<span style="color: rgba(128, 0, 128, 1)">0</span>&&_photoSize.height!=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">142</span> _imagePickerController.allowsEditing =<span style="color: rgba(0, 0, 0, 1)"> YES;
</span><span style="color: rgba(0, 128, 128, 1)">143</span> }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">144</span> _imagePickerController.allowsEditing =<span style="color: rgba(0, 0, 0, 1)"> NO;
</span><span style="color: rgba(0, 128, 128, 1)">145</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">146</span>
<span style="color: rgba(0, 128, 128, 1)">147</span> _imagePickerController.mediaTypes = @[(NSString *<span style="color: rgba(0, 0, 0, 1)">)kUTTypeImage];
</span><span style="color: rgba(0, 128, 128, 1)">148</span> _imagePickerController.sourceType =<span style="color: rgba(0, 0, 0, 1)"> UIImagePickerControllerSourceTypeCamera;
</span><span style="color: rgba(0, 128, 128, 1)">149</span> _imagePickerController.cameraCaptureMode =<span style="color: rgba(0, 0, 0, 1)"> UIImagePickerControllerCameraCaptureModePhoto;
</span><span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">152</span>
<span style="color: rgba(0, 128, 128, 1)">153</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 从相册中选择</span>
<span style="color: rgba(0, 128, 128, 1)">154</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span>)selectPhotoLibrary:(UIAlertAction *<span style="color: rgba(0, 0, 0, 1)">)action {
</span><span style="color: rgba(0, 128, 128, 1)">155</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">156</span> dispatch_async(dispatch_get_main_queue(), ^<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">157</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">158</span> <span style="color: rgba(0, 0, 0, 1)"> });
</span><span style="color: rgba(0, 128, 128, 1)">159</span>
<span style="color: rgba(0, 128, 128, 1)">160</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">161</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">_imagePickerController) {
</span><span style="color: rgba(0, 128, 128, 1)">162</span> _imagePickerController = ;
</span><span style="color: rgba(0, 128, 128, 1)">163</span> _imagePickerController.<span style="color: rgba(0, 0, 255, 1)">delegate</span> =<span style="color: rgba(0, 0, 0, 1)"> self;
</span><span style="color: rgba(0, 128, 128, 1)">164</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (_photoSize.width!=<span style="color: rgba(128, 0, 128, 1)">0</span>&&_photoSize.height!=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">166</span> _imagePickerController.allowsEditing =<span style="color: rgba(0, 0, 0, 1)"> YES;
</span><span style="color: rgba(0, 128, 128, 1)">167</span> }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">168</span> _imagePickerController.allowsEditing =<span style="color: rgba(0, 0, 0, 1)"> NO;
</span><span style="color: rgba(0, 128, 128, 1)">169</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">170</span> _imagePickerController.mediaTypes = @[(NSString *)kUTTypeImage,(NSString *<span style="color: rgba(0, 0, 0, 1)">)kUTTypeMovie];
</span><span style="color: rgba(0, 128, 128, 1)">171</span> _imagePickerController.sourceType =<span style="color: rgba(0, 0, 0, 1)"> UIImagePickerControllerSourceTypePhotoLibrary;
</span><span style="color: rgba(0, 128, 128, 1)">172</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">173</span>
<span style="color: rgba(0, 128, 128, 1)">174</span>
<span style="color: rgba(0, 128, 128, 1)">175</span>
<span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> mark -
<span style="color: rgba(0, 128, 128, 1)">178</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> mark - UIImagePickerViewController delegate
<span style="color: rgba(0, 128, 128, 1)">179</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span>)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *<span style="color: rgba(0, 0, 0, 1)">)info {
</span><span style="color: rgba(0, 128, 128, 1)">180</span>
<span style="color: rgba(0, 128, 128, 1)">181</span> NSString * mediaType =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">182</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (){
</span><span style="color: rgba(0, 128, 128, 1)">183</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (_photoSize.height!=<span style="color: rgba(128, 0, 128, 1)">0</span>&&_photoSize.width!=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">184</span> UIImage *image =<span style="color: rgba(0, 0, 0, 1)"> ];
</span><span style="color: rgba(0, 128, 128, 1)">185</span> self.image =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">186</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (picker.sourceType ==<span style="color: rgba(0, 0, 0, 1)"> UIImagePickerControllerSourceTypeCamera) {
</span><span style="color: rgba(0, 128, 128, 1)">187</span> <span style="color: rgba(0, 0, 0, 1)"> UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
</span><span style="color: rgba(0, 128, 128, 1)">188</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">189</span> }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">190</span> UIImage *image =<span style="color: rgba(0, 0, 0, 1)"> ];
</span><span style="color: rgba(0, 128, 128, 1)">191</span> self.image =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">192</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (picker.sourceType ==<span style="color: rgba(0, 0, 0, 1)"> UIImagePickerControllerSourceTypeCamera) {
</span><span style="color: rgba(0, 128, 128, 1)">193</span> <span style="color: rgba(0, 0, 0, 1)"> UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
</span><span style="color: rgba(0, 128, 128, 1)">194</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">195</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">196</span> [picker dismissViewControllerAnimated:YES completion:^<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">197</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (self.<span style="color: rgba(0, 0, 255, 1)">delegate</span> && ) {
</span><span style="color: rgba(0, 128, 128, 1)">198</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (self.image) {
</span><span style="color: rgba(0, 128, 128, 1)">199</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">200</span> } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">201</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">202</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">203</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">204</span> <span style="color: rgba(0, 0, 0, 1)"> }];
</span><span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">206</span>
<span style="color: rgba(0, 128, 128, 1)">207</span>
<span style="color: rgba(0, 128, 128, 1)">208</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">209</span>
<span style="color: rgba(0, 128, 128, 1)">210</span> -(<span style="color: rgba(0, 0, 255, 1)">void</span>)imagePickerControllerDidCancel:(UIImagePickerController *<span style="color: rgba(0, 0, 0, 1)">)picker{
</span><span style="color: rgba(0, 128, 128, 1)">211</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">212</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">213</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 裁剪图片</span>
<span style="color: rgba(0, 128, 128, 1)">214</span> - (UIImage *)scaleImage:(UIImage *<span style="color: rgba(0, 0, 0, 1)">)img Tosize:(CGSize)size {
</span><span style="color: rgba(0, 128, 128, 1)">215</span>
<span style="color: rgba(0, 128, 128, 1)">216</span> CGFloat screenWidth =<span style="color: rgba(0, 0, 0, 1)"> .bounds.size.width;
</span><span style="color: rgba(0, 128, 128, 1)">217</span> CGSize imgSize = CGSizeMake(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">218</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (size.width != <span style="color: rgba(128, 0, 128, 1)">0</span> && size.height != <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">219</span> imgSize = CGSizeMake(size.width, img.size.height*(size.width/<span style="color: rgba(0, 0, 0, 1)">img.size.width));
</span><span style="color: rgba(0, 128, 128, 1)">220</span> } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">221</span> imgSize = CGSizeMake(screenWidth*<span style="color: rgba(128, 0, 128, 1)">2</span>, img.size.height*(screenWidth/img.size.width)*<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">222</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">223</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建一个bitmap的context
</span><span style="color: rgba(0, 128, 128, 1)">224</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 并把它设置成为当前正在使用的context</span>
<span style="color: rgba(0, 128, 128, 1)">225</span> <span style="color: rgba(0, 0, 0, 1)"> UIGraphicsBeginImageContext(imgSize);
</span><span style="color: rgba(0, 128, 128, 1)">226</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 绘制改变大小的图片</span>
<span style="color: rgba(0, 128, 128, 1)">227</span> ;
</span><span style="color: rgba(0, 128, 128, 1)">228</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 从当前context中创建一个改变大小后的图片</span>
<span style="color: rgba(0, 128, 128, 1)">229</span> UIImage *scaledImage =<span style="color: rgba(0, 0, 0, 1)"> UIGraphicsGetImageFromCurrentImageContext();
</span><span style="color: rgba(0, 128, 128, 1)">230</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使当前的context出堆栈</span>
<span style="color: rgba(0, 128, 128, 1)">231</span> <span style="color: rgba(0, 0, 0, 1)"> UIGraphicsEndImageContext();
</span><span style="color: rgba(0, 128, 128, 1)">232</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回新的改变大小后的图片</span>
<span style="color: rgba(0, 128, 128, 1)">233</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> scaledImage;
</span><span style="color: rgba(0, 128, 128, 1)">234</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">235</span>
<span style="color: rgba(0, 128, 128, 1)">236</span>
<span style="color: rgba(0, 128, 128, 1)">237</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修正image方向</span>
<span style="color: rgba(0, 128, 128, 1)">238</span> - (UIImage *)fixOrientation:(UIImage *<span style="color: rgba(0, 0, 0, 1)">)aImage {
</span><span style="color: rgba(0, 128, 128, 1)">239</span>
<span style="color: rgba(0, 128, 128, 1)">240</span>
<span style="color: rgba(0, 128, 128, 1)">241</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (aImage.imageOrientation ==<span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationUp)
</span><span style="color: rgba(0, 128, 128, 1)">242</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> aImage;
</span><span style="color: rgba(0, 128, 128, 1)">243</span>
<span style="color: rgba(0, 128, 128, 1)">244</span> CGAffineTransform transform =<span style="color: rgba(0, 0, 0, 1)"> CGAffineTransformIdentity;
</span><span style="color: rgba(0, 128, 128, 1)">245</span>
<span style="color: rgba(0, 128, 128, 1)">246</span> <span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (aImage.imageOrientation) {
</span><span style="color: rgba(0, 128, 128, 1)">247</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationDown:
</span><span style="color: rgba(0, 128, 128, 1)">248</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationDownMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">249</span> transform =<span style="color: rgba(0, 0, 0, 1)"> CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
</span><span style="color: rgba(0, 128, 128, 1)">250</span> transform =<span style="color: rgba(0, 0, 0, 1)"> CGAffineTransformRotate(transform, M_PI);
</span><span style="color: rgba(0, 128, 128, 1)">251</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">252</span>
<span style="color: rgba(0, 128, 128, 1)">253</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationLeft:
</span><span style="color: rgba(0, 128, 128, 1)">254</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationLeftMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">255</span> transform = CGAffineTransformTranslate(transform, aImage.size.width, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">256</span> transform =<span style="color: rgba(0, 0, 0, 1)"> CGAffineTransformRotate(transform, M_PI_2);
</span><span style="color: rgba(0, 128, 128, 1)">257</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">258</span>
<span style="color: rgba(0, 128, 128, 1)">259</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationRight:
</span><span style="color: rgba(0, 128, 128, 1)">260</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationRightMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">261</span> transform = CGAffineTransformTranslate(transform, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, aImage.size.height);
</span><span style="color: rgba(0, 128, 128, 1)">262</span> transform = CGAffineTransformRotate(transform, -<span style="color: rgba(0, 0, 0, 1)">M_PI_2);
</span><span style="color: rgba(0, 128, 128, 1)">263</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">264</span> <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">265</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">266</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">267</span>
<span style="color: rgba(0, 128, 128, 1)">268</span> <span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (aImage.imageOrientation) {
</span><span style="color: rgba(0, 128, 128, 1)">269</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationUpMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">270</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationDownMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">271</span> transform = CGAffineTransformTranslate(transform, aImage.size.width, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">272</span> transform = CGAffineTransformScale(transform, -<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">273</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">274</span>
<span style="color: rgba(0, 128, 128, 1)">275</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationLeftMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">276</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationRightMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">277</span> transform = CGAffineTransformTranslate(transform, aImage.size.height, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">278</span> transform = CGAffineTransformScale(transform, -<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">279</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">280</span> <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">281</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">282</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">283</span>
<span style="color: rgba(0, 128, 128, 1)">284</span> CGContextRef ctx =<span style="color: rgba(0, 0, 0, 1)"> CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
</span><span style="color: rgba(0, 128, 128, 1)">285</span> CGImageGetBitsPerComponent(aImage.CGImage), <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">286</span> <span style="color: rgba(0, 0, 0, 1)"> CGImageGetColorSpace(aImage.CGImage),
</span><span style="color: rgba(0, 128, 128, 1)">287</span> <span style="color: rgba(0, 0, 0, 1)"> CGImageGetBitmapInfo(aImage.CGImage));
</span><span style="color: rgba(0, 128, 128, 1)">288</span> <span style="color: rgba(0, 0, 0, 1)"> CGContextConcatCTM(ctx, transform);
</span><span style="color: rgba(0, 128, 128, 1)">289</span> <span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (aImage.imageOrientation) {
</span><span style="color: rgba(0, 128, 128, 1)">290</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationLeft:
</span><span style="color: rgba(0, 128, 128, 1)">291</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationLeftMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">292</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationRight:
</span><span style="color: rgba(0, 128, 128, 1)">293</span> <span style="color: rgba(0, 0, 255, 1)">case</span><span style="color: rgba(0, 0, 0, 1)"> UIImageOrientationRightMirrored:
</span><span style="color: rgba(0, 128, 128, 1)">294</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Grr...</span>
<span style="color: rgba(0, 128, 128, 1)">295</span> CGContextDrawImage(ctx, CGRectMake(<span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,aImage.size.height,aImage.size.width), aImage.CGImage);
</span><span style="color: rgba(0, 128, 128, 1)">296</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">297</span>
<span style="color: rgba(0, 128, 128, 1)">298</span> <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">299</span> CGContextDrawImage(ctx, CGRectMake(<span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,aImage.size.width,aImage.size.height), aImage.CGImage);
</span><span style="color: rgba(0, 128, 128, 1)">300</span> <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">301</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">302</span>
<span style="color: rgba(0, 128, 128, 1)">303</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> And now we just create a new UIImage from the drawing context</span>
<span style="color: rgba(0, 128, 128, 1)">304</span> CGImageRef cgimg =<span style="color: rgba(0, 0, 0, 1)"> CGBitmapContextCreateImage(ctx);
</span><span style="color: rgba(0, 128, 128, 1)">305</span> UIImage *img =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">306</span> <span style="color: rgba(0, 0, 0, 1)"> CGContextRelease(ctx);
</span><span style="color: rgba(0, 128, 128, 1)">307</span> <span style="color: rgba(0, 0, 0, 1)"> CGImageRelease(cgimg);
</span><span style="color: rgba(0, 128, 128, 1)">308</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> img;
</span><span style="color: rgba(0, 128, 128, 1)">309</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">310</span>
<span style="color: rgba(0, 128, 128, 1)">311</span>
<span style="color: rgba(0, 128, 128, 1)">312</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 提醒</span>
<span style="color: rgba(0, 128, 128, 1)">313</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span>)alertViewWithTitle:(NSString *)title message:(NSString *<span style="color: rgba(0, 0, 0, 1)">)msg {
</span><span style="color: rgba(0, 128, 128, 1)">314</span> UIAlertController *alertVC =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">315</span> ];
</span><span style="color: rgba(0, 128, 128, 1)">316</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">317</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">318</span>
<span style="color: rgba(0, 128, 128, 1)">319</span>
<span style="color: rgba(0, 128, 128, 1)">320</span> <span style="color: rgba(0, 0, 255, 1)">@end</span></pre>
</div>
<p>在需要使用的地方遵循<gzhPhotoManagerDelegate>协议</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ViewController.m
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">图片选择
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Created by 郭志贺 on 2020/5/26.
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Copyright © 2020 郭志贺. All rights reserved.
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ViewController.h</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gzhPhotoManager.h</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* 屏幕高度 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">#define</span> ScreenH .bounds.size.height
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* 屏幕宽度 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">#define</span> ScreenW .bounds.size.width
<span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 255, 1)">@interface</span> ViewController ()<gzhPhotoManagerDelegate>
<span style="color: rgba(0, 128, 128, 1)">18</span> @property(nonatomic,strong)UIImageView *<span style="color: rgba(0, 0, 0, 1)"> selectImageView;
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">@end</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">@implementation</span><span style="color: rgba(0, 0, 0, 1)"> ViewController
</span><span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span> - (<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">)viewDidLoad {
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Do any additional setup after loading the view.</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>
<span style="color: rgba(0, 128, 128, 1)">27</span> _selectImageView =<span style="color: rgba(0, 0, 0, 1)"> [init];
</span><span style="color: rgba(0, 128, 128, 1)">28</span> _selectImageView.frame = CGRectMake(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, ScreenW, ScreenH);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> _selectImageView.contentMode =<span style="color: rgba(0, 0, 0, 1)"> UIViewContentModeScaleAspectFit;
</span><span style="color: rgba(0, 128, 128, 1)">30</span> _selectImageView.clipsToBounds =<span style="color: rgba(0, 0, 0, 1)"> YES;
</span><span style="color: rgba(0, 128, 128, 1)">31</span> _selectImageView.backgroundColor =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">33</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> _selectImageView.userInteractionEnabled =<span style="color: rgba(0, 0, 0, 1)"> YES;
</span><span style="color: rgba(0, 128, 128, 1)">35</span> UITapGestureRecognizer * selectPhotoTapGes =<span style="color: rgba(0, 0, 0, 1)"> [initWithTarget:self action:@selector(selectPhoto:)];
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">37</span>
<span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">39</span> -(<span style="color: rgba(0, 0, 255, 1)">void</span>)selectPhoto:(UITapGestureRecognizer *<span style="color: rgba(0, 0, 0, 1)">)taps{
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">调用</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> [selectPhotoWithController:self <span style="color: rgba(0, 0, 255, 1)">delegate</span><span style="color: rgba(0, 0, 0, 1)">:self size:CGSizeMake(ScreenW, ScreenW)];
</span><span style="color: rgba(0, 128, 128, 1)">42</span>
<span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">44</span> -(<span style="color: rgba(0, 0, 255, 1)">void</span>)selectedPhotoImage:(UIImage *<span style="color: rgba(0, 0, 0, 1)">)image{
</span><span style="color: rgba(0, 128, 128, 1)">45</span>
<span style="color: rgba(0, 128, 128, 1)">46</span> _selectImageView.image =<span style="color: rgba(0, 0, 0, 1)"> image;
</span><span style="color: rgba(0, 128, 128, 1)">47</span>
<span style="color: rgba(0, 128, 128, 1)">48</span>
<span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 255, 1)">@end<br></span></pre>
</div>
<p>可直接复制使用,新手见解,如有遗漏或不足敬请告知。</p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/2043045/202005/2043045-20200527152347487-826601330.jpg"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/guozhihe/p/12965927.html
頁:
[1]