一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - IOS實現手動截圖并保存

IOS實現手動截圖并保存

2021-01-03 16:47世俗孤島 IOS

這篇文章主要介紹了IOS實現手動剪裁圖片并保存到相冊,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例介紹了ios手動剪裁圖片并保存到相冊的詳細代碼,分享給大家供大家參考,具體內容如下

一、實現效果
1、操作步驟

  • 繪制一個矩形框,彈出一個alertview,提示是否保存圖片
  • 點擊"是",將圖片保存到相冊
  • 在相冊中查看保存的圖片

2、效果圖

IOS實現手動截圖并保存

二、實現思路
1、在控制器的view上添加一個imageview,設置圖片
2、在控制器的view上添加一個pan手勢
3、跟蹤pan手勢,繪制一個矩形框(圖片的剪切區域)
4、在pan手勢結束時,通過alertview提示“是否將圖片保存至相冊?”

  • 點擊“是”,保存圖片
  • 點擊“否”,暫時什么都不做

三、實現步驟
1、通過storyboard在控制器的view上添加一個imageview(設置圖片),并在控制器的.m文件中擁有該屬性

?
1
@property (weak, nonatomic) iboutlet uiimageview *imageview;

2、設置通過手勢繪制的圖片的剪切區域
將圖片的剪切區域作為成員屬性clipview

?
1
@property (nonatomic, weak) uiview *clipview;

3、通過懶加載的方式創建clipview,并初始化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (uiview *)clipview
{
  //如果clipview為被創建,就創建
  if (_clipview == nil)
  {
    uiview *view = [[uiview alloc] init];
    _clipview = view;
    //設置clipview的背景色和透明度
    view.backgroundcolor = [uicolor blackcolor];
    view.alpha = 0.5;
    //將clipview添加到控制器的view上,此時的clipview不會顯示(未設置其frame)
    [self.view addsubview:_clipview];
  }
  return _clipview;
}

4、給控制器的view添加pan手勢,跟蹤pan手勢,繪制圖片剪切區域
1)、創建并添加手勢

?
1
2
3
4
5
6
7
/**創建手勢**/
uipangesturerecognizer *pan = [[uipangesturerecognizer alloc] initwithtarget:self action:@selector(pan:)];
  /**
  *每當pan手勢的位置發生變化,就會調用pan:方法,并將手勢作為參數傳遞
  */
/**添加手勢**/
[self.view addgesturerecognizer:pan];

2)、增加成員屬性,記錄pan手勢開始的點

?
1
@property (nonatomic, assign) cgpoint startpoint;

3)、監聽手勢的移動

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
- (void)pan:(uipangesturerecognizer *)pan
{
  cgpoint endpoint = cgpointzero;
 
  if (pan.state == uigesturerecognizerstatebegan)
  {
    /**開始點擊時,記錄手勢的起點**/
    self.startpoint = [pan locationinview:self.view];
  }
  else if(pan.state == uigesturerecognizerstatechanged)
  {
    /**當手勢移動時,動態改變終點的值,并計算起點與終點之間的矩形區域**/
    endpoint = [pan locationinview:self.view];
    //計算矩形區域的寬高
    cgfloat w = endpoint.x - self.startpoint.x;
    cgfloat h = endpoint.y - self.startpoint.y;
    //計算矩形區域的frame
    cgrect cliprect = cgrectmake(self.startpoint.x, self.startpoint.y, w, h);
    //設置剪切區域的frame
    self.clipview.frame = cliprect;
  }
  else if(pan.state == uigesturerecognizerstateended)
  {
    /**若手勢停止,將剪切區域的圖片內容繪制到圖形上下文中**/
    //開啟位圖上下文
    uigraphicsbeginimagecontextwithoptions(self.imageview.bounds.size, no, 0);
    //創建大小等于剪切區域大小的封閉路徑
    uibezierpath *path = [uibezierpath bezierpathwithrect:self.clipview.frame];
    //設置超出的內容不顯示,
    [path addclip];
    //獲取繪圖上下文
    cgcontextref context = uigraphicsgetcurrentcontext();
    //將圖片渲染的上下文中
    [self.imageview.layer renderincontext:context];
    //獲取上下文中的圖片
    uiimage *image = uigraphicsgetimagefromcurrentimagecontext();
    //關閉位圖上下文
    uigraphicsendimagecontext();
    //移除剪切區域視圖控件,并清空
    [self.clipview removefromsuperview];
    self.clipview = nil;
    //將圖片顯示到imageview上
    self.imageview.image = image;
    //通過alertview提示用戶,是否將圖片保存至相冊
    uialertview *alertview = [[uialertview alloc] initwithtitle:@"保存圖片" message:@"是否將圖片保存至相冊?" delegate:self cancelbuttontitle:@"否" otherbuttontitles:@"是", nil];
    [alertview show];
}
}

4)、設置alertview的代理方法,確定是否保存圖片

?
1
2
3
4
5
6
7
8
9
10
11
- (void)alertview:(nonnull uialertview *)alertview clickedbuttonatindex:(nsinteger)buttonindex
{
  //若點擊了“是”,則保存圖片
  if (buttonindex == 1)
  {
    uiimagewritetosavedphotosalbum(self.imageview.image, nil, nil, nil);
    /**
    * 該方法可以設置保存完畢調用的方法,此處未進行設置
    */
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
主站蜘蛛池模板: 日本高清免费中文字幕不卡 | xxxx泡妞中国 | 日本漫画工囗全彩番在线 | 久久精品热只有精品 | 成人在线日韩 | 色橹橹 | 日韩国产欧美成人一区二区影院 | 精品一区二区三区免费站 | 特黄特黄一级高清免费大片 | 精品一区二区三区中文 | 免费观看一级特黄三大片视频 | 亚洲swag精品自拍一区 | 国产在线视频欧美亚综合 | 沟厕okn系列在线播放 | 亚洲精品老司机福利在线播放 | 免费一区视频 | 日韩欧美一区二区三区免费观看 | 欧美国产精品久久 | 偷拍自拍校园春色 | 日本手机在线视频 | 亚洲国产免费观看视频 | 国产永久一区二区三区 | 日本xxx在线观看免费播放 | 午夜精品在线 | 免费一级特黄特色大片在线 | 欧美男人的天堂 | 日本一卡2卡3卡4卡乱 | 明星ai人脸替换脸忘忧草 | 日韩在线视频在线 | 深夜影院深a | 扒开腿开嫩苞 | 国产成人精品本亚洲 | 亚洲国产在线综合018 | 91精品国产综合久久精品 | 国产视频一二三区 | 91tv在线| 星空传媒在线视频 | 四虎影视在线影院在线观看观看 | 欧美疯狂做爰3xxx | 色图大全| fulao在线观看的 |