这里有另一种方法,它考虑了缩放级别。我有一个带有4个不同UIImageView层的滚动视图,并且我想要获取它们当前状态的截图:
float theScale = 1.0f / theScrollView.zoomScale;
CGRect visibleArea = CGRectMake((int)(theScrollView.contentOffset.x * theScale), (int)(theScrollView.contentOffset.y * theScale),
(int)(theScrollView.bounds.size.width * theScale), (int)(theScrollView.bounds.size.height * theScale));
NSArray *layers = [NSArray arrayWithObjects:imageLayer1, imageLayer2, imageLayer3, imageLayer4, nil];
UIGraphicsBeginImageContext(visibleArea.size);
for (UIImageView *layer in layers) {
CALayer *coreLayer = layer.layer;
coreLayer.bounds = CGRectMake(layer.frame.origin.x - visibleArea.origin.x, layer.frame.origin.y - visibleArea.origin.y, layer.frame.size.width, layer.frame.size.height);
[coreLayer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这将在绝对坐标中进行屏幕截图。也就是说,如果您在滚动视图中有一个2048 * 2048像素的图像,并且您只能看到其中大约四分之一,那么无论您的屏幕分辨率如何,它都会拍摄512 * 512像素的截图。如果您想以屏幕分辨率(例如320 * 480)拍摄屏幕截图,则必须在上述代码之后直接调整图像,方法如下:
UIGraphicsBeginImageContext(theScrollView.frame.size);
[screenshot drawInRect:CGRectMake(0, 0, theScrollView.frame.size.width, theScrollView.frame.size.height)];
UIImage *smallScreenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/tmp
文件夹为空! - Eric