要获取视图的屏幕截图,我正在使用此代码
-(UIImage *)renderImageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return renderedImage;
}
现在假设我的视图大于屏幕大小,并说它相对于屏幕的矩形是{-100,-100,screenWidth + 100,screenHeight + 100},我想拍摄我的视图的截图。 我目前正在使用此代码:
-(UIImage *)renderImageFromView:(UIView *)view withRect:(CGRect)frame
{
CGRect rect = {-100, -100, screenWidth+100, screenHeight+100};
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return renderedImage;
}
但问题是: 最终图像包含来自{0,0,screenWidth + 100,screenHeight + 100}的视图的屏幕截图,但我希望它是{-100,-100,screenWidth + 100,screenHeight + 100}。
任何解决方案?
答案 0 :(得分:0)
您必须首先将该视图设置为屏幕,并将该设置原点设置为(0,0),然后指向某个临时变量的商店,以便在获取屏幕截图后将其分配回来。
现在将该偏移量添加到宽度和高度,就像您查看x是-100然后将其添加到宽度+ 100并设置x = 0.同样适用于y。
现在创建SIGTERM
和SIGKILL
并进行正确的屏幕截图。并且不要忘记将原始帧设置回来查看。
希望它有用
答案 1 :(得分:0)
在您的情况下,问题是上下文只是大小而不是框架,因此将rect
的原点设置为-100, -100
无效。我相信解决方案是创建一个大小在两个方向上都大+200点的上下文,然后告诉视图在该上下文的(100, 100)
点呈现自己。要设置绘制位置的相对原点,我尝试在视图图层上使用变换。
很抱歉使用Swift,但我相信您可以轻松地将其重写为ObjC:
func renderImageFromView(view: UIView) -> UIImage? {
let size = CGSize(width: view.bounds.size.width + 200, height: view.bounds.size.height + 200)
UIGraphicsBeginImageContextWithOptions(size, true, UIScreen.main.scale)
let context = UIGraphicsGetCurrentContext()!
view.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransform.identity.translatedBy(x: 100, y: 100))
view.layer.render(in: context)
view.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransform.identity)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}