蝎子便便 發表於 2020-5-26 15:28:00

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> &lt;Foundation/Foundation.h&gt;
<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 &lt;NSObject&gt;

- (<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> &lt;MobileCoreServices/MobileCoreServices.h&gt;
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> &lt;Photos/Photos.h&gt;
<span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> &lt;AssetsLibrary/AssetsLibrary.h&gt;
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 255, 1)">#import</span> &lt;MetalPerformanceShaders/MetalPerformanceShaders.h&gt;
<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 () &lt;UINavigationControllerDelegate,UIImagePickerControllerDelegate&gt;
<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>&lt;gzhPhotoManagerDelegate&gt; <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(&amp;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>&amp;&amp;_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>&amp;&amp;_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>&amp;&amp;_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> &amp;&amp; ) {
</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> &amp;&amp; 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>在需要使用的地方遵循&lt;gzhPhotoManagerDelegate&gt;协议</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 ()&lt;gzhPhotoManagerDelegate&gt;
<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>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/2043045/202005/2043045-20200527152347487-826601330.jpg"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/guozhihe/p/12965927.html
頁: [1]
查看完整版本: iOS开发从相册选择照片或拍照