I want to take a screenshot. In this screenshot, I want the text and image in it. However, I am having an issue because when I take a screenshot, I only see the text but not the image.
I think the problem is that clearContainerView
only contains the text but not the image. I can't put the image inside of clearContainerView
because I want the image to stretch the entire screen... and I want the text centered between the title and tab bar (as shown with green square above).
My code and pictures are below:
This is my current layout in Storyboard:
This is what I want a screenshot of:
This is the screenshot that I get:
This is my code:
@IBOutlet weak var clearContainerView: UIView!
@IBAction func takeScreenshotTapped(_ sender: UIButton) {
let screenshot = clearContainerView.screenshot()
print(screenshot)
}
extension UIView {
func screenshot() -> UIImage {
let image = UIGraphicsImageRenderer(size: bounds.size).image { _ in
drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
}
return image
}
}
Any suggestions on how to do this?
You can use the following method on your controller view to get the portion of clearContainerView which will be a snapshot view. Then you can use that view object and take a screenshot of it.
resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:
You have to pass the rect which will is your clearContainerView frame. You can pass zero insets in case you don't want any stretchable content. It return a view object which will contain your imageView portion + your complete clearContainerView. Then you can use the returned view and take its screen shot.
I tried with the following.
My original view.
The screenshot