第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何將UIView轉(zhuǎn)換為圖像

如何將UIView轉(zhuǎn)換為圖像

繁星coding 2019-10-16 13:18:25
我想將UIView轉(zhuǎn)換為圖像并將其保存在我的應(yīng)用程序中。有人可以告訴我如何拍攝視圖的屏幕截圖或?qū)⑵滢D(zhuǎn)換為圖像,以及將其保存在應(yīng)用程序中(而不是相機(jī)膠卷)的最佳方法是什么?這是該視圖的代碼:var overView   = UIView(frame: CGRectMake(0, 0, self.view.frame.width/1.3, self.view.frame.height/1.3))overView.center = CGPointMake(CGRectGetMidX(self.view.bounds),CGRectGetMidY(self.view.bounds)-self.view.frame.height/16);overView.backgroundColor = UIColor.whiteColor()self.view.addSubview(overView)self.view.bringSubviewToFront(overView)
查看完整描述

3 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗 獲得超7個贊

擴(kuò)展UIView應(yīng)該可以解決問題。


extension UIView {


    // Using a function since `var image` might conflict with an existing variable

    // (like on `UIImageView`)

    func asImage() -> UIImage {

        let renderer = UIGraphicsImageRenderer(bounds: bounds)

        return renderer.image { rendererContext in

            layer.render(in: rendererContext.cgContext)

        }

    }

}

蘋果不鼓勵使用UIGraphicsBeginImageContextiOS 10并引入P3色域。UIGraphicsBeginImageContext僅sRGB和32位。他們介紹了新的UIGraphicsImageRendererAPI,該API完全基于顏色進(jìn)行管理,基于塊,具有PDF和圖像的子類,并自動管理上下文生存期。請查看WWDC16會話205了解更多詳細(xì)信息(圖像渲染從11:50左右開始)


Edit1:為確保它能在所有設(shè)備上正常運行,請#available回退到iOS的早期版本:


extension UIView {


    // Using a function since `var image` might conflict with an existing variable

    // (like on `UIImageView`)

    func asImage() -> UIImage {

        if #available(iOS 10.0, *) {

            let renderer = UIGraphicsImageRenderer(bounds: bounds)

            return renderer.image { rendererContext in

                layer.render(in: rendererContext.cgContext)

            }

        } else {

            UIGraphicsBeginImageContext(self.frame.size)

            self.layer.render(in:UIGraphicsGetCurrentContext()!)

            let image = UIGraphicsGetImageFromCurrentImageContext()

            UIGraphicsEndImageContext()

            return UIImage(cgImage: image!.cgImage!)

        }

    }

}


查看完整回答
反對 回復(fù) 2019-10-16
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊

你可以使用擴(kuò)展


extension UIImage {

    convenience init(view: UIView) {

        UIGraphicsBeginImageContext(view.frame.size)

        view.layer.render(in:UIGraphicsGetCurrentContext()!)

        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        self.init(cgImage: image!.cgImage!)

    }

}

這是迅速的3/4版本:


extension UIImage {

    convenience init(view: UIView) {

        UIGraphicsBeginImageContext(view.frame.size)

        view.layer.render(in:UIGraphicsGetCurrentContext()!)

        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        self.init(cgImage: image!.cgImage!)

    }

}


查看完整回答
反對 回復(fù) 2019-10-16
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊

通過drawViewHierarchyInRect:afterScreenUpdates:將UIView轉(zhuǎn)換為圖像,這比renderInContext快很多倍


重要說明:請勿從viewDidLoad或viewWillAppear調(diào)用此函數(shù),請確保在視圖完全顯示/加載后捕獲視圖


對象C


     UIGraphicsBeginImageContextWithOptions(myView.bounds.size, myView.opaque, 0.0f);

     [myView drawViewHierarchyInRect:myView.bounds afterScreenUpdates:NO];

     UIImage *snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext();

     UIGraphicsEndImageContext();


     myImageView.image =  snapshotImageFromMyView;

保存編輯的圖像相冊


     UIImageWriteToSavedPhotosAlbum(snapshotImageFromMyView, nil,nil, nil);

迅捷3/4


    UIGraphicsBeginImageContextWithOptions(myView.bounds.size, myView.isOpaque, 0.0)

    myView.drawHierarchy(in: myView.bounds, afterScreenUpdates: false)

    let snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    print(snapshotImageFromMyView)

    myImageView.image = snapshotImageFromMyView

具有擴(kuò)展功能的超簡單通用化,iOS11,swift3 / 4


extension UIImage{

    convenience init(view: UIView) {


    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)

    view.drawHierarchy(in: view.bounds, afterScreenUpdates: false)

    let image = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    self.init(cgImage: (image?.cgImage)!)


  }

}



Use : 

 //myView is completly loaded/visible , calling this code after only after viewDidAppear is call

 imgVV.image = UIImage.init(view: myView)

 // Simple image object

 let img =  UIImage.init(view: myView)


查看完整回答
反對 回復(fù) 2019-10-16
  • 3 回答
  • 0 關(guān)注
  • 819 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號