我有一个ScrollView,里面有很多视图。有些观点是隐藏的。如果未隐藏这些视图,ScrollView将展开。如果未隐藏所有视图,则ScrollView的大小会扩大,并且大于屏幕的高度。因此,您需要滚动才能看到所有内容。
我想做的是拍摄整个屏幕的图片,每个视图都没有隐藏。所以,假设一个视图被隐藏,然后我将以编程方式取消隐藏视图然后拍照。 我不希望用户能够看到屏幕展开然后折叠。
这是我到目前为止所拥有的。只有在调用此函数之前视图尚未隐藏时,它才有效。问题是如果我在隐藏视图时尝试调用此函数,那么它只会拍摄当前屏幕/可见内容的图片,它不会捕获屏幕外的所有内容/不可见。
func createImageFromEntireScreen() -> UIImage {
print("Beginning: \(scrollView.contentSize)")
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, 0.0)
print("Middle: \(scrollView.contentSize)")
let savedContentOffset: CGPoint = scrollView.contentOffset
let savedFrame: CGRect = scrollView.frame
let savedIdeaSummaryStackViewHiddenValue = ideaSummaryStackView.hidden.boolValue
let savedAllQuestionsCombinedStackView = allQuestionsCombinedStackView.hidden.boolValue
let savedNotesStackView = notesStackView.hidden.boolValue
// THIS IS THE PROBLEM. If these views were already unhidden
// before the screenshot, then its OK. But if I hide them in
// here then it only takes a picture of what is on screen.
// The reason I unhide it here is so the user doesn't see this happening.
ideaSummaryStackView.hidden = false
ideaSummaryStackView.alpha = 1.0
allQuestionsCombinedStackView.hidden = false
allQuestionsCombinedStackView.alpha = 1.0
notesStackView.hidden = false
notesStackView.alpha = 1.0
scrollView.contentOffset = CGPointZero
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)
print("Ending: \(scrollView.contentSize)")
scrollView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let createdImage = UIGraphicsGetImageFromCurrentImageContext()
// ----- Revert to original screen: Begin
ideaSummaryStackView.hidden = savedIdeaSummaryStackViewHiddenValue
allQuestionsCombinedStackView.hidden = savedAllQuestionsCombinedStackView
notesStackView.hidden = savedNotesStackView
scrollView.contentOffset = savedContentOffset
scrollView.frame = savedFrame
// ----- Revert to original screen: End
UIGraphicsEndImageContext()
return createdImage
}
你们有什么想法?
更新问题:
经过一些测试后,我意识到即使我取消隐藏视图后contentSize
也不会改变。我用print("Beginning: \(scrollView.contentSize)")
和其他人更新了问题以证明这一点。但是contentSize
会更新,如果我使用delay
函数来提供它。当我设置contentSize
时,似乎这个函数执行得太快,hidden = false
无法更新。任何想法如何解决这个问题?
答案 0 :(得分:0)
我在目标C 中遇到过这个问题,所以我已经解决了这个问题
如果你想看到我可以分享的代码,但它在Objective C中。
注意:此过程无法捕获滚动视图中可滚动的部分。