亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取UIScrollView的屏幕截圖,包括屏幕外部分

獲取UIScrollView的屏幕截圖,包括屏幕外部分

德瑪西亞99 2019-07-19 16:07:28
獲取UIScrollView的屏幕截圖,包括屏幕外部分我有一個UIScrollViewDeendent,它實現了如下所示的獲取Screenshot方法:-(void)takeScreenshot {     CGRect contextRect  = CGRectMake(0, 0, 768, 1004);   UIGraphicsBeginImageContext(contextRect.size);       [self.layer renderInContext:UIGraphicsGetCurrentContext()];   UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();   UIGraphicsEndImageContext();   // do something with the viewImage here.}這基本上移動到滾動視圖的頂部,并獲取可見區域的屏幕截圖。當iPad是面向人像的時候,它工作得很好,但是當它在風景中的時候,圖像的底部被切斷了(因為可見區域的高度只有748,而不是1004)。是否可以獲得UIScrollView包括沒有出現在屏幕上的區域?還是我需要向下滾動,拍第二張照片,把它們縫在一起?
查看完整描述

3 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

我必須在iOS 8和更高版本上實現這一點,并在iPhone上進行測試。接受的答案只是呈現滾動視圖的可見部分,而圖像的其余部分仍然是空白的。

我試著用drawViewHierarchyInRect-運氣不好取決于afterScreenUpdates賦存truefalse我被拉伸了一部分圖像或者只是部分內容。

實現正確的快照的唯一方法是UIScrollView其全部內容是將其添加到另一個臨時視圖中,然后呈現它。

示例代碼如下(scrollview是我的VC中的插座)

func?getImageOfScrollView()?->?UIImage?{
????var?image?=?UIImage()

????UIGraphicsBeginImageContextWithOptions(self.scrollView.contentSize,?false,?UIScreen.mainScreen().scale)

????//?save?initial?values
????let?savedContentOffset?=?self.scrollView.contentOffset????let?savedFrame?=?self.scrollView.frame????let?savedBackgroundColor?=?self.scrollView.backgroundColor????//?reset?offset?to?top?left?point
????self.scrollView.contentOffset?=?CGPointZero
????//?set?frame?to?content?size
????self.scrollView.frame?=?CGRectMake(0,?0,?self.scrollView.contentSize.width,?self.scrollView.contentSize.height)
????//?remove?background
????self.scrollView.backgroundColor?=?UIColor.clearColor()

????//?make?temp?view?with?scroll?view?content?size
????//?a?workaround?for?issue?when?image?on?ipad?was?drawn?incorrectly
????let?tempView?=?UIView(frame:?CGRectMake(0,?0,?self.scrollView.contentSize.width,?self.scrollView.contentSize.height))

????//?save?superview
????let?tempSuperView?=?self.scrollView.superview????//?remove?scrollView?from?old?superview
????self.scrollView.removeFromSuperview()
????//?and?add?to?tempView
????tempView.addSubview(self.scrollView)

????//?render?view
????//?drawViewHierarchyInRect?not?working?correctly
????tempView.layer.renderInContext(UIGraphicsGetCurrentContext())
????//?and?get?image
????image?=?UIGraphicsGetImageFromCurrentImageContext()

????//?and?return?everything?back
????tempView.subviews[0].removeFromSuperview()
????tempSuperView?.addSubview(self.scrollView)

????//?restore?saved?settings
????self.scrollView.contentOffset?=?savedContentOffset????self.scrollView.frame?=?savedFrame????self.scrollView.backgroundColor?=?savedBackgroundColor????UIGraphicsEndImageContext()

????return?image}


查看完整回答
反對 回復 2019-07-19
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

UIView擴展與處理UIScrollView的工作示例:

extension UIView {
    func screenshot() -> UIImage {

            if(self is UIScrollView) {
                let scrollView = self as! UIScrollView

                let savedContentOffset = scrollView.contentOffset                let savedFrame = scrollView.frame                UIGraphicsBeginImageContext(scrollView.contentSize)
                scrollView.contentOffset = .zero                self.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)
                self.layer.render(in: UIGraphicsGetCurrentContext()!)
                let image = UIGraphicsGetImageFromCurrentImageContext()
                UIGraphicsEndImageContext();

                scrollView.contentOffset = savedContentOffset
                scrollView.frame = savedFrame                return image!
            }

            UIGraphicsBeginImageContext(self.bounds.size)
            self.layer.render(in: UIGraphicsGetCurrentContext()!)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image!

        }}


查看完整回答
反對 回復 2019-07-19
  • 3 回答
  • 0 關注
  • 1504 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號