I want to create a screenshot of UIScrollView , which should contain all the scroll content, even the content that is not currently displayed to the user. For this, I tried the following two methods:
func snapShot(view:UIView) -> UIImage { UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0); view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true); let image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } func snapShotScrollView(scrollView:UIScrollView) -> UIImage { let bounds = scrollView.bounds; scrollView.bounds.size = scrollView.contentSize; let image = snapShot(scrollView); scrollView.bounds = bounds; return image; }
But the resulting image still just displays those view elements inside the scroll view that are currently visible to the user. But I want to see all the opinions.
How can i do this?
EDIT
I also tried:
func snapshot() -> UIImage? { var image: UIImage? UIGraphicsBeginImageContext(scrollView.contentSize) let savedContentOffset = scrollView.contentOffset let savedFrame = scrollView.frame; scrollView.contentOffset = CGPoint.zero; scrollView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height); scrollView.layer.render(in: UIGraphicsGetCurrentContext()!) image = UIGraphicsGetImageFromCurrentImageContext(); scrollView.contentOffset = savedContentOffset; scrollView.frame = savedFrame; UIGraphicsEndImageContext(); return image }
Edit 2
My UIScrollView is placed inside a UIView and contains a UIStackView . The view is designed as a popup view so that it looks like a dialog appears. The sample code from my first edit works in an empty UIViewController with only one UIScrollView , but not in the constellation mentioned.
ios swift swift3 uiscrollview screenshot
Mulgard
source share