亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中如何獲取某個視圖的截圖詳析

2020-07-26 02:19:33
字體:
來源:轉載
供稿:網友

前言

最近在做SDK的截圖,想觸發類似系統的截屏功能,找了一圈,總結一下靠譜的幾種方式。

我寫了個UIView 的category,將這幾種方式封裝和簡化了一下。

第一種情形截圖

這種是最最普通的截圖,針對一般的視圖上添加視圖的情況,基本都可以使用。

源碼:

/** 普通的截圖 該API僅可以在未使用layer和OpenGL渲染的視圖上使用  @return 截取的圖片 */- (UIImage *)nomalSnapshotImage{ UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [UIScreen mainScreen].scale); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();  return snapshotImage;}

第二種情形截圖

如果一些視圖是用OpenGL渲染出來的,那么使用上面的方式就無法截圖到OpenGL渲染的部分,這時候就要用到改進后的截圖方案:

/** 針對有用過OpenGL渲染過的視圖截圖  @return 截取的圖片 */- (UIImage *)openglSnapshotImage{ CGSize size = self.bounds.size; UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale); CGRect rect = self.frame; [self drawViewHierarchyInRect:rect afterScreenUpdates:YES]; UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();  return snapshotImage;}

第三種情形截圖

有一些特殊的Layer(比如:AVCaptureVideoPreviewLayer 和 AVSampleBufferDisplayLayer) 添加到某個View 上后,使用上面的幾種方式都無法截取到Layer上的內容,這個時候可以使用系統的一個API,但是該API只能返回一個UIView,返回的UIView 可以修改frame 等參數。

/** 截圖 以UIView 的形式返回(_UIReplicantView)  @return 截取出來的圖片轉換的視圖 */- (UIView *)snapshotView{ UIView *snapView = [self snapshotViewAfterScreenUpdates:YES]; return snapView;}

遺留問題:
通過方式三截取的UIView,無法轉換為UIImage,我試過將返回的截圖View寫入位圖再轉換成UIImage,但是返回的UIImage 要么為空,要么沒有內容。如果有人知道解決方案請告知我。

UIWebView的截圖

去年在做藍牙打印的時候,嘗試過將UIWebView 的內容轉換為UIImage,寫過一個UIWebView的category,也算是對UIWebView 的截圖,順便也貼出來吧

- (UIImage *)imageForWebView{ // 1.獲取WebView的寬高 CGSize boundsSize = self.bounds.size; CGFloat boundsWidth = boundsSize.width; CGFloat boundsHeight = boundsSize.height; // 2.獲取contentSize CGSize contentSize = self.scrollView.contentSize; CGFloat contentHeight = contentSize.height; // 3.保存原始偏移量,便于截圖后復位 CGPoint offset = self.scrollView.contentOffset; // 4.設置最初的偏移量為(0,0); [self.scrollView setContentOffset:CGPointMake(0, 0)]; NSMutableArray *images = [NSMutableArray array]; while (contentHeight > 0) {  // 5.獲取CGContext 5.獲取CGContext  UIGraphicsBeginImageContextWithOptions(boundsSize, NO, 0.0);  CGContextRef ctx = UIGraphicsGetCurrentContext();  // 6.渲染要截取的區域  [self.layer renderInContext:ctx];  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();  UIGraphicsEndImageContext();  // 7.截取的圖片保存起來  [images addObject:image];  CGFloat offsetY = self.scrollView.contentOffset.y;  [self.scrollView setContentOffset:CGPointMake(0, offsetY + boundsHeight)];  contentHeight -= boundsHeight; } // 8 webView 恢復到之前的顯示區域 [self.scrollView setContentOffset:offset]; CGFloat scale = [UIScreen mainScreen].scale; CGSize imageSize = CGSizeMake(contentSize.width * scale,         contentSize.height * scale); // 9.根據設備的分辨率重新繪制、拼接成完整清晰圖片 UIGraphicsBeginImageContext(imageSize); [images enumerateObjectsUsingBlock:^(UIImage *image, NSUInteger idx, BOOL *stop) {  [image drawInRect:CGRectMake(0,scale * boundsHeight * idx,scale * boundsWidth,scale * boundsHeight)]; }]; UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();  return fullImage;}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av日韩在线观看| 91欧美精品午夜性色福利在线| 精品福利在线看| 中文字幕亚洲激情| 美女av一区二区三区| 欧美电影在线观看完整版| 国产在线视频91| 欧美日韩国产成人在线| 91国产美女在线观看| 国产精品久久久久久av福利软件| 日韩成人久久久| 日韩av在线免费看| 国产精品成人品| 色偷偷91综合久久噜噜| 精品久久久久久久久久久久久久| 欧美伊久线香蕉线新在线| 成人性生交xxxxx网站| 久久精品影视伊人网| 欧美激情精品久久久久| 一区二区日韩精品| 国产精品亚洲美女av网站| 国产精品毛片a∨一区二区三区|国| 日韩欧美在线免费观看| 日韩精品福利在线| 亚洲国产小视频在线观看| 国产欧美一区二区三区在线| 国产精品扒开腿做爽爽爽男男| 精品视频在线观看日韩| 亚洲a在线播放| 欧洲中文字幕国产精品| 亚洲石原莉奈一区二区在线观看| 日韩久久免费电影| 欧美理论电影在线播放| 欧美精品中文字幕一区| 国产欧美一区二区三区久久人妖| 2019中文字幕免费视频| 中文字幕亚洲色图| 91精品国产高清自在线| 成人www视频在线观看| 日韩精品在线影院| 91国产在线精品| 久久99热精品| 久久人人爽人人爽人人片av高请| 成人免费看吃奶视频网站| 国产精品91一区| 亚洲电影成人av99爱色| 亚洲精品98久久久久久中文字幕| 亚洲精品720p| 久久久噜噜噜久久| 91久久在线播放| 国产手机视频精品| 91精品国产综合久久香蕉最新版| 国产精品av免费在线观看| 欧美黑人极品猛少妇色xxxxx| 中文字幕亚洲情99在线| 在线观看欧美日韩| 麻豆国产精品va在线观看不卡| 日韩av网站导航| 麻豆国产精品va在线观看不卡| 在线精品国产成人综合| 成人国内精品久久久久一区| 欧美激情一区二区三级高清视频| 欧美性在线视频| 国产精品欧美亚洲777777| 欧美激情亚洲激情| 超在线视频97| 亚洲精品一区二区网址| 91欧美精品成人综合在线观看| 精品国产乱码久久久久久婷婷| 欧美电影免费观看高清| 日韩高清免费观看| 日韩精品在线观看网站| 欧美性xxxxx极品娇小| 日韩在线国产精品| 91色精品视频在线| 日韩hd视频在线观看| 欧美日韩亚洲精品一区二区三区| 国产精品高精视频免费| 69av在线播放| 高清欧美性猛交xxxx| 国产亚洲精品美女久久久| 国产精品国产三级国产aⅴ9色| 中文字幕国产亚洲| 日韩视频免费观看| 国产一区二区三区精品久久久| 91精品国产自产在线观看永久| 中文字幕日韩欧美在线| 粉嫩av一区二区三区免费野| 欧美成人激情在线| 欧美噜噜久久久xxx| 亚洲人免费视频| 国产成人福利夜色影视| 国产乱肥老妇国产一区二| 国产欧美va欧美va香蕉在| 日韩av在线不卡| 亚洲视频在线看| 日韩a**中文字幕| 少妇激情综合网| 国产精品高清免费在线观看| 欧美精品videosex极品1| 国产精品丝袜高跟| 69av视频在线播放| 亚洲电影免费观看高清完整版| 国产精品999| 在线日韩第一页| 北条麻妃在线一区二区| 亚洲成人久久久久| 国产精品一区二区三区久久| 亚洲欧美成人一区二区在线电影| 国产一级揄自揄精品视频| 久久综合亚洲社区| 最近2019免费中文字幕视频三| 久久久久免费视频| 精品久久久久久国产| 国产精品吹潮在线观看| 两个人的视频www国产精品| 久久99久久亚洲国产| 欧美香蕉大胸在线视频观看| 国产精品高潮呻吟久久av黑人| 亚洲欧洲av一区二区| 久久91精品国产91久久久| 亚洲片在线观看| 中文精品99久久国产香蕉| 成人日韩在线电影| 热久久这里只有精品| 欧美成aaa人片在线观看蜜臀| 亚洲摸下面视频| 永久免费看mv网站入口亚洲| 91精品国产91久久久久久| 欧美激情一区二区三级高清视频| 午夜精品久久久久久99热| 久久成人精品电影| 91精品91久久久久久| 亚洲第一天堂av| 97激碰免费视频| 国产成人一区二| 久久久999精品视频| 久久久久久久久久久亚洲| 岛国精品视频在线播放| 91极品女神在线| 日韩精品在线免费观看视频| 国产亚洲精品久久久久久| 国产一区二区三区视频| 欧洲亚洲女同hd| 精品视频在线观看日韩| 国产精品美女在线观看| 亚洲九九九在线观看| 日韩的一区二区| 国产精品视频一区二区三区四| 国产日韩欧美夫妻视频在线观看| 日本道色综合久久影院| 欧美成人精品影院| 日本三级韩国三级久久| 中文字幕日韩有码| 国产女精品视频网站免费| 国产精品美女免费看| 久久精品国产亚洲精品2020| 亚洲自拍偷拍色图| 国产主播喷水一区二区| 91国产中文字幕| 国产噜噜噜噜久久久久久久久| 高跟丝袜欧美一区| 精品人伦一区二区三区蜜桃免费| 97视频在线观看亚洲|