我有一个 UIView,它有几个 UIImageViews 作为子视图。这些子视图中的每一个都应用了不同的仿射变换。我想获取相当于我的 UIView 的屏幕截图,将其捕获为 UIImage 或其他一些图像表示。
我已经尝试过的方法,将图层渲染到 CGContext :
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
不保留我的子视图的定位或其他仿射变换。
我真的很感激朝着正确的方向踢球。
我有一个 UIView,它有几个 UIImageViews 作为子视图。这些子视图中的每一个都应用了不同的仿射变换。我想获取相当于我的 UIView 的屏幕截图,将其捕获为 UIImage 或其他一些图像表示。
我已经尝试过的方法,将图层渲染到 CGContext :
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
不保留我的子视图的定位或其他仿射变换。
我真的很感激朝着正确的方向踢球。
尝试这个:
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这是一个 Swift 2.x 版本:
// This flattens <allViews> into single UIImage
func flattenViews(allViews: [UIView]) -> UIImage? {
// Return nil if <allViews> empty
if (allViews.isEmpty) {
return nil
}
// If here, compose image out of views in <allViews>
// Create graphics context
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, CGInterpolationQuality.High)
// Draw each view into context
for curView in allViews {
curView.drawViewHierarchyInRect(curView.frame, afterScreenUpdates: false)
}
// Extract image & end context
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Return image
return image
}