快照 UIView
使用 UIGraphicsGetImageFromCurrentImageContext()
和各种其他方法,包括 render(in:)
和 drawHierarchy( in: afterScreenUpdates:)
当您需要呈现常规 ol' View 时,函数非常有用。
在尝试绘制按比例缩放的 UIView
层次结构时,我一直无法正常工作。有问题的 View 是 UIScrollView
的内容和缩放 View 。
View 和它的父 View 拒绝在快照之前做任何可以解决缩放问题的转换。结果是快照看起来像:
- A) 一个不幸的裁剪 View ,它的原点在左上角(在 iOS 上是预期的),但随后只扩展到 View 的未转换“边界”。如果 View 碰巧没有缩放或比例变换,这没关系,但这种情况很少发生。
- B) 带有黑色大边框的超大 View ,与转换后的 View “框架”相匹配。我假设发生这种情况是因为对缩放 View 的框架进行快照时有些奇怪。
TL;DR:在通过 UIScrollView
缩放和缩放后,无法快照/呈现 UIView
,尽管尝试在快照之前转换或重绘。
编辑:请参阅下面的示例,了解这种令人沮丧的行为。
最佳答案
要绘制 ScrollView 的完整内容 View ,您可以使用类似的东西:
@IBAction func onClear(_ sender: Any) {
self.targetImageView.image = nil
}
@IBAction func onSnapshot(_ sender: Any) {
UIGraphicsBeginImageContextWithOptions(self.contentView.bounds.size, false, UIScreen.main.scale)
if let context = UIGraphicsGetCurrentContext() {
self.contentView.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
self.targetImageView.image = image
} else {
self.targetImageView.image = nil
}
UIGraphicsEndImageContext()
}
测试
在上部区域有一个带有激活缩放的 ScrollView (maximumZoomScale = 5)。在下方区域只有一个简单的 UIImageView。如果点击标签为“snap”的按钮,onSnapshot
将被调用,下方的 UIImageView 将填充快照图像。使用“清除”按钮,UIImageView 的图像设置为 nil。
关于ios - 快照缩放的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57365990/