2017-04-07 7 views
1

親ビューに複数のサブビューがあり、uiviewをuiimageに変換する必要がありますが、特定のサブビューのみを変換する必要があります。だから、私はスクリーンショットを撮るために必要なビューにタグを追加し、それを自分のビューに追加しましたが、スクリーンショットを撮ろうとすると黒い画面が表示されます。しかし、私は定期的な親ビューを使用すると、私はすべてのサブビューの写真を取得します。サブビューに追加することなく、どのようにしてuiviewをスクリーンショットできますか?

let viewPic = UIView() 

      for subview in self.view.subviews { 

       if(subview.tag == 6) { 
        viewPic.addSubview(subview) 
       } 

       if(subview.tag == 8) { 
        viewPic.addSubview(subview) 
       } 
      } 

      let picImage = viewPic.getSnapshotImage() //This is a black screen 

getSnapshotImage

extension UIView { 
    public func getSnapshotImage() -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0) 
     self.drawHierarchy(in: self.bounds, afterScreenUpdates: false) 
     let snapshotItem: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 
     return snapshotItem 
    } 
} 
+0

この回答から参照してください、それはあなたを助けるかもしれない[iOSのスクリーンショットの一部screen](http://stackoverflow.com/questions/12687909/ios-screenshot-part-of-the-screen) – iDevAmit

答えて

0

まずデフォルトは問題を引き起こす可能性がゼロフレームとなりますので、ごviewPicは、フレームサイズを設定しません。

第2に、サンプルプロジェクトでgetSanpshotImage()を使用しようとしましたが、私は常に空のイメージを取得します。

(スクリーンショットを参照)私はあなたが欲しいものを得ることができ、デモ・コードを見てください:

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let viewPic = UIView() 
     viewPic.frame = self.view.frame 

     let view1 = UIView() 
     view1.frame = CGRect(x: 0, y: 0, width: 100, height: 100) 
     view1.backgroundColor = UIColor.red 
     viewPic.addSubview(view1) 

     let view2 = UIView() 
     view2.frame = CGRect(x: 0, y: 200, width: 100, height: 100) 
     view2.backgroundColor = UIColor.blue 
     viewPic.addSubview(view2) 

     let picImage = viewPic.convertToImage() //This is a black screen 
     print(picImage) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

extension UIView { 
    func convertToImage() -> UIImage { 
     let renderer = UIGraphicsImageRenderer(bounds: bounds) 
     return renderer.image { rendererContext in 
      layer.render(in: rendererContext.cgContext) 
     } 
    } 
} 

enter image description here

関連する問題